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

时间:2016-05-09 10:32:26

标签: machine-learning scikit-learn svm multilabel-classification

我试图在数据集上使用y_scores = OneVsRestClassifier(svm.SVC())。predict() 像虹膜和泰坦尼克一样。麻烦的是我得到的y_scores是连续的值。就像我得到的虹膜数据集一样:

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

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

的形式给出了适当的结果
[[ 0  1   0]
 [ 1   0  1]...
虹膜数据集上的

等。请帮助。

1 个答案:

答案 0 :(得分:0)

嗯,这根本不是真的。

>>> 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(这会匹配你的输出维度,因为预测应该返回一个向量,而不是一个矩阵)。然后,SVM返回到每个超平面的有符号距离,这是从数学角度看它的决策函数。