SGDClassifier.partial_fit 返回的错误是“classes should include labels”

我尝试通过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()Xy文档的解释:

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

当您使用X1y1时,错误变得明显,如果使用文档中建议的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_fitfit内部被使用。

以下示例可以工作:

X1 = X[2:3]y1 = y[2:3]classes = np.unique(y)f1 = sgd_clf.partial_fit(X1, y1, classes=classes)

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注