One-vs-Rest算法和开箱即用的多类算法给出了不同的结果

时间:2016-11-28 19:18:01

标签: scikit-learn classification

有人可以解释为什么OneVsRestClassifier给出的结果与开箱即用的算法不同吗?

from sklearn.multiclass import OneVsRestClassifier, OneVsOneClassifier

X = [[1,2],[1,3],[4,2],[2,3],[1,4]]
y = [1,2,3,2,1]

X_pred = [[2,4], [5,4], [3,7]]

dummy_clf = OneVsRestClassifier(SGDClassifier(verbose=0, class_weight="auto", loss='modified_huber', random_state=0)) # first case
#dummy_clf = SGDClassifier(verbose=0, class_weight="auto", loss='modified_huber', random_state=0) # second case

dummy_clf.fit(X, y)
dummy_clf.predict_proba(X_pred)

第一种情况:

array([[ 0.5,  0.5,  0. ],
       [ 0. ,  1. ,  0. ],
       [ 0.5,  0.5,  0. ]])

第二种情况:

array([[ 0.,  1.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  1.,  0.]])

1 个答案:

答案 0 :(得分:0)

OneVsRest为您提供了所有类的X_pred概率,因此第一个和最后一个测试用例具有多个类的值(总和为1)。分类器适用于所有课程。

OneVsOne训练所有班级对的分类器。对于所有类对,预测最多的类是赢家,因此每个实例只能获得一个预测。