2016-04-11 10 views
18

私はscikit-learn example(クラシファイアの比較)を勉強しており、predict_probadecision_functionと混同しています。scikit-learnのpredict_probaとdecision_functionの違いは何ですか?

これらは、Z = clf.decision_function()またはZ = clf.predict_proba()のいずれかを使用して輪郭を描画することによって分類結果をプロットします。

これら2つの違いは何ですか?それぞれの分類方法がスコアの2つのどちらかを持つようになっていますか?

どちらが分類結果を解釈するのに適していますか、どちらから選択する必要がありますか?

答えて

23

後者のpredict_probaは、各クラスにインスタンスが存在する確率を出力する(ソフト)分類器のメソッドです。

前者のdecision_functionは、分離超平面までの距離を求めます。例えば、(n)SVM分類器は、空間を分類結果に関連する領域に分離する超平面を見つける。この関数は、ポイントを与えられて、セパレータとの距離を求めます。

私は、predict_probが一般的にあなたの場合にはより便利だと思います - 他の方法はアルゴリズムに特有です。

+0

ありがとうアミー!私は、最終的な予測、decision_fuctionまたはpredict_probを計算するために分類子が何を使用するのか、まだ疑問に思っていますか?これらの2つは何らかの形でつながっているようですね。 – Rosy

+0

はい、実際には関連しています。具体的には逆単調です。 –

+0

@AmiTavory、scikit-learn関連の質問をここでご覧ください。https://stackoverflow.com/questions/48788611/python-find-document-similarity-to-show-related-ones? –

0

あなたの例では、それが存在する場合、そのコードはdecision_functionを使用しています

if hasattr(clf, "decision_function"): 
    Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) 
else: 
    Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1] 

です。 SVMの場合に、predict_proba

is both "expensive" and has "theoretical issues"スケーリングプラットを使用

(バイナリの場合に)計算されます。だからここではdecision_functionが使われます。 (@Amiが言ったように、これはマージン - 超平面への距離です。それ以上の計算なしでアクセスできます)。 SVMの場合、

predict_probaの代わりに decision_functionを使用することをお勧めします。

decision_functionSGDClassifier'sがあります。ここで、predict_probaは損失関数に依存し、decision_functionは普遍的に利用可能である。

関連する問題