【发布时间】:2021-02-05 11:52:28
【问题描述】:
我想使用分类器,例如sklearn.linear_model.SGDClassifier,在 neuraxle 管道中,并使用 partial_fit 以在线方式对其进行拟合。我将分类器包裹在一个
SKLearnWrapper 和 use_partial_fit=True,像这样:
from neuraxle.pipeline import Pipeline
from neuraxle.steps.sklearn import SKLearnWrapper
from sklearn.linear_model import SGDClassifier
p = Pipeline([
SKLearnWrapper(SGDClassifier(), use_partial_fit=True)
]
)
X = [[1.], [2.], [3.]]
y = ['class1', 'class2', 'class1']
p.fit(X, y)
但是,为了以在线方式拟合分类器,需要为 partial_fit 函数提供一个附加参数 classes,其中包含数据中可能出现的类,例如classes=['class1', 'class2'],至少是第一次调用它。所以上面的代码会报错:
ValueError: classes must be passed on the first call to partial_fit.
其他fit_params 也会出现同样的问题,例如sample_weight。在标准的 sklearn 管道中,fit_params 可以通过 sample_weight 参数:
from sklearn.linear_model import SGDClassifier
from sklearn.pipeline import Pipeline
q = Pipeline([
('clf', SGDClassifier())
])
q.fit(X, y, clf__sample_weight=[0.25, 0.5, 0.25])
当然,标准的 sklearn 管道不允许在分类器上调用 partial_fit,这就是为什么我想首先使用 neuraxle 管道。
有没有办法将附加参数传递给 neuraxle 管道中步骤的 fit 或 partial_fit 函数?
【问题讨论】:
标签: machine-learning scikit-learn neuraxle