Scikit learn scikit学习0.15而非0.14时,等级为_weight=auto的SGDClassizer失败

Scikit learn scikit学习0.15而非0.14时,等级为_weight=auto的SGDClassizer失败,scikit-learn,Scikit Learn,当我使用以下选项训练an时:sgdclassizer(loss='log',class_weight=None,pould='l2'),训练将毫无错误地完成。 然而,当我在scikit learn v0.15上使用class_weight='auto'训练这个分类器时,我得到了以下错误: return self.model.fit(X, y) File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1

当我使用以下选项训练an时:
sgdclassizer(loss='log',class_weight=None,pould='l2')
,训练将毫无错误地完成。 然而,当我在scikit learn v0.15上使用
class_weight='auto'
训练这个分类器时,我得到了以下错误:

  return self.model.fit(X, y)
  File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/linear_model/stochastic_gradient.py", line 485, in fit
    sample_weight=sample_weight)
  File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/linear_model/stochastic_gradient.py", line 389, in _fit
    classes, sample_weight, coef_init, intercept_init)
  File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/linear_model/stochastic_gradient.py", line 336, in _partial_fit
    y_ind)
  File "/home/rose/.local/lib/python2.7/site-packages/scikit_learn-0.15.0b1-py2.7-linux-x86_64.egg/sklearn/utils/class_weight.py", line 43, in compute_class_weight
    raise ValueError("classes should have valid labels that are in y")
ValueError: classes should have valid labels that are in y
是什么引起的

以下是有关
class_-weight
的文档,以供参考:

为class_weight fit参数预设。关联的权重 上课。如果没有给出,所有类都应该有权重1。 “自动”模式使用y值自动调整权重 与类频率成反比


我认为这可能是scikit learn中的一个bug。作为解决方法,请尝试以下操作:

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y_encoded = le.fit_transform(y)
self.model.fit(X, y_encoded)
pred = le.inverse_transform(self.model.predict(X))

我正在对此PR进行修复:


如果它能为您解决问题,请随时测试并报告。

您是否在OSX上使用相同的scikit学习版本?版本0.15刚刚发布,也许你可以试试。如果bug仍然存在,即同一代码在Linux EC2上而不是MACOSX上引发错误,那么您应该考虑向SCIKIT学习邮件列表报告这一点。我使用的版本是0.15。查看您的回溯,您使用的是BETA1,而不是版本0.15。