2016-11-28 2 views
0

OneVsRestClassifierがデフォルトのアルゴリズムと異なる結果をもたらす理由を説明できますか?One-vs-Restアルゴリズムとすぐに使えるマルチクラスアルゴリズムは異なる結果をもたらします

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.]]) 

答えて

0

あなたのクラスのすべてのためのX_predの確率を与えるOneVsRest、これ最初と最後のテストケースは、値を持っています複数のクラス(合計は1)。クラシファイアはすべてのクラスで訓練されています。

OneVsOneは、すべてのクラスペアで分類子を訓練します。すべてのクラスペアについて、最も予測されたクラスが勝者であるため、インスタンスごとに1つの予測しか得られません。

関連する問題