我尝试通过SGDClassifer.partial_fit来预测新添加数据的标签,如下所示:
from sklearn import neighbors, linear_modelimport numpy as npdef train_predict(): X = [[1, 1], [2, 2.5], [2, 6.8], [4, 7]] y = [1, 2, 3, 4] sgd_clf = linear_model.SGDClassifier(loss="log") sgd_clf.fit(X, y) X1 = [[6,9]] y1=[5] f1 = sgd_clf.partial_fit(X1,y1) f1.predict([[6,9]]) return f1if __name__ == "__main__": clf = train_predict()
使用fit方法完美地预测了标签。然而,使用partial fit进行预测时出现了错误,如下所示:
in compute_class_weight raise ValueError("classes should include all valid labels that can be in y")
类似于Sklearn SGDC partial_fit ValueError: classes should include all valid labels that can be in y,我阅读了partial_fit的说明文档,http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier.partial_fit
但我仍然无法弄清楚如何设置partial_fit的参数,以便能够预测动态添加的数据。
有什么参考资料或想法吗?
回答:
根本问题似乎是您输入到partial fit的数据不是原始数据(输入到.fit()
的数据)的子集。
至少这是我对partial_fit()
中X
和y
文档的解释:
X : {array-like, sparse matrix}, shape (n_samples, n_features)
Subset of the training data
y : numpy array, shape (n_samples,)
Subset of the target values
当您使用X1
和y1
时,错误变得明显,如果使用文档中建议的classes = np.unique(y1)
,会得到:
ValueError: `classes=array([5])` is not the same as on last call to partial_fit, was: array([1, 2, 3, 4])
这表明partial_fit
在fit
内部被使用。
以下示例可以工作:
X1 = X[2:3]y1 = y[2:3]classes = np.unique(y)f1 = sgd_clf.partial_fit(X1, y1, classes=classes)
因此,请确保X1
和y1
包含在您的原始数据集中。