我尝试通过SGDClassifer.partial_fit预测我新添加数据的标签,如下所示:
from sklearn import neighbors, linear_model
import numpy as np
def 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 f1
if __name__ == "__main__":
clf = train_predict()
完美预测标签。但是,使用部分拟合进行预测会导致错误:
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的参数,以便我能够预测即时添加的数据。
任何参考或想法?
答案 0 :(得分:0)
基本问题似乎是您的部分拟合输入数据不是原始数据的一个子集(输入到.fit()
)。
这个要求至少是我如何解释X
中y
和partial_fit()
的文档:
X:{array-like,sparse matrix},shape(n_samples,n_features)
Subset of the training data
y:numpy数组,形状(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
。