有人可以解释为什么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.]])
Onevsrest为您提供了所有类的X_pred概率,因此第一个和最后一个测试用例具有多个类别的值(总和为1)。分类器在所有课程上都接受过培训。
OneVsone在所有类对上训练分类器。对于所有班级对,班级最预测的是获胜者,因此您只能获得一个预测。