【问题标题】:How to use OneVsRestClassifier with SVC for multilabel problems?如何使用 OneVsRestClassifier 和 SVC 解决多标签问题?
【发布时间】:2013-04-30 09:56:51
【问题描述】:

我正在使用 OneVsRestClassifier 进行多标签分类。它适用于 LinearSVC,但是当我将其应用于 SVC 时,会出现以下错误:

classifier = OneVsRestClassifier(SVC(class_weight='balanced'))
classifier.fit(X1, y1)
y2 = classifier.predict(X2)

Traceback (most recent call last):
...
File "/usr/local/lib/python2.7/dist-packages/sklearn/multiclass.py", line 219, in predict
  return predict_ovr(self.estimators_, self.label_binarizer_, X)
File "/usr/local/lib/python2.7/dist-packages/sklearn/multiclass.py", line 93, in predict_ovr
  Y = np.array([_predict_binary(e, X) for e in estimators])
File "/usr/local/lib/python2.7/dist-packages/sklearn/multiclass.py", line 66, in _predict_binary
  score = estimator.predict_proba(X)[:, 1]
File "/usr/local/lib/python2.7/dist-packages/sklearn/svm/base.py", line 490, in predict_proba
  "probability estimates must be enabled to use this method")
NotImplementedError: probability estimates must be enabled to use this method</code>

有人知道是什么吗?

【问题讨论】:

  • t 看起来您正在尝试获得概率输出,但您在训练模型时忘记包含概率估计。你能发布训练命令吗?
  • 很简单:classifier = OneVsRestClassifier(SVC(class_weight='auto')); classifier.fit(X1, y1); y2 = classifier.predict(X2) 预测时出现错误(在最后一行)。相同的代码适用于 LinearSVC,但不适用于 SVC,这让我很吃惊。

标签: svm scikit-learn


【解决方案1】:

这是bugOneVsRestClassifier 在找到一个时调用predict_proba 方法,但是SVC 上的那个实际上不起作用,除非您使用probability=True 构造它以获得Platt scaling(我实际上并不鼓励)。

它适用于LinearSVC 的原因是该类没有predict_proba,因此OvR 退回到decision_function 方法。

【讨论】:

  • 这个问题解决了吗?如果没有,是否有临时解决方案可以使其正常工作?
  • 我仍然在 0.14.1 版本中看到这个问题。我的代码与 OP 的代码相同,只是我在 SVC() 之前使用了带有 SelectKBest 的管道。
  • @willwest 奇怪。但无论如何,它在当前测试版 0.15b1 中运行良好。
猜你喜欢
  • 2012-12-22
  • 2020-03-13
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 2020-03-02
相关资源
最近更新 更多