我尝试通过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类似,我阅读了part_fit手册http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier.partial_fit

但是我仍然无法弄清楚如何设置partial_fit的参数,这样我就可以预测动态添加的数据。

有什么参考或想法吗?

最佳答案

潜在的问题似乎是部分适合的输入数据不是原始数据的子集(输入到.fit())。

该要求至少是我解释Xypartial_fit()的文档的方式:


  X:{类似数组,稀疏矩阵},形状(n_samples,n_features)

Subset of the training data

  
  y:numpy数组,形状(n_samples,)

Subset of the target values



当您将X1y1classes = 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)


因此,请确保在原始数据集中包含X1y1

08-25 08:22