OneVsRestClassifier(svm.SVC()).predict() 给出连续值

Posted

技术标签:

【中文标题】OneVsRestClassifier(svm.SVC()).predict() 给出连续值【英文标题】:OneVsRestClassifier(svm.SVC()).predict() gives continous values 【发布时间】:2016-09-03 22:56:20 【问题描述】:

我正在尝试在数据集上使用 y_scores=OneVsRestClassifier(svm.SVC()).predict() 像 iris 和 titanic 。问题是我得到 y_scores 作为连续值。就像我得到的 iris 数据集一样:

[[ -3.70047231  -0.74209097   2.29720159]
 [ -1.93190155   0.69106231  -2.24974856]
.....

我正在将 OneVsRestClassifier 用于其他分类器模型,例如 knn、randomforest、朴素贝叶斯,它们以

的形式给出适当的结果
[[ 0  1   0]
 [ 1   0  1]...

鸢尾花数据集等。请帮忙。

【问题讨论】:

代码你编辑你的问题,包括一个最小的工作示例好吗? 【参考方案1】:

这根本不是真的。

>>> from sklearn.multiclass import OneVsRestClassifier
>>> from sklearn.svm import SVC
>>> from sklearn.datasets import load_iris
>>> iris = load_iris()
>>> clf = OneVsRestClassifier(SVC())
>>> clf.fit(iris['data'], iris['target'])
OneVsRestClassifier(estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False),
          n_jobs=1)
>>> print clf.predict(iris['data'])
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

也许您改为调用decision_function(这将匹配您的输出维度,因为 predict 应该返回一个向量,而不是一个矩阵)。然后,SVM 返回到每个超平面的有符号距离,从数学角度来看,这是它的决策函数。

【讨论】:

以上是关于OneVsRestClassifier(svm.SVC()).predict() 给出连续值的主要内容,如果未能解决你的问题,请参考以下文章

使用 OneVsRestClassifier 时如何传递 XGBoost 拟合参数?

OneVsRestClassifier(svm.SVC()).predict() 给出连续值

GridSearch 用于 OneVsRestClassifier 中的估计器

如何使用带有 SVC 估计器的 OneVsRestClassifier 的 GridSearchCV?

Sklearn:评估 GridSearchCV 中 OneVsRestClassifier 的每个分类器的性能

“OneVsRestClassifier”(Scikit-learn)和“Binary Relevance”(Scikit-multilearn)有啥区别?