2016-04-11 1 views
18

Ich studiere eine scikit-learn example (Classifier Vergleich) und wurde mit predict_proba und decision_function verwirrt.Was ist der Unterschied zwischen predict_proba und decision_function in scikit-learn?

Sie zeichnen die Klassifizierungsergebnisse durch Zeichnen der Konturen unter Verwendung von Z = clf.decision_function() oder Z = clf.predict_proba().

Was sind die Unterschiede zwischen diesen beiden? Ist es so, dass jede Klassifizierungsmethode eine der beiden als Punktzahl hat?

Welches ist besser geeignet, das Klassifizierungsergebnis zu interpretieren und wie sollte ich aus den beiden wählen?

Antwort

23

Letztere, predict_proba ist eine Methode eines (weichen) Klassifikators, der die Wahrscheinlichkeit ausgibt, dass die Instanz in jeder der Klassen ist.

Der ehemalige, decision_function, findet den Abstand zur trennenden Hyperebene. Zum Beispiel findet ein (n) SVM-Klassifizierer Hyperebenen, die den Raum in Bereiche trennen, die Klassifizierungsergebnissen zugeordnet sind. Diese Funktion ermittelt bei einem Punkt den Abstand zu den Trennzeichen.

Ich würde vermuten, dass predict_prob in Ihrem Fall im Allgemeinen nützlicher ist - die andere Methode ist spezifischer für den Algorithmus.

+0

Danke Ami! Ich frage mich immer noch, was die Klassifikatoren verwenden, um die finale Vorhersage, decision_fuction oder den precid_prob zu berechnen? Diese beiden scheinen irgendwie miteinander verbunden zu sein, oder? – Rosy

+0

Ja, sie sind tatsächlich verwandt; speziell sind sie umgekehrt monoton. –

+0

@AmiTavory, darf ich Sie bitten, sich hier eine Frage zum Thema scikit-learn anzusehen - https://stackoverflow.com/questions/48788611/python-find-document-similarity-to-show-related-ones? –

0

Ihr Beispiel ist

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] 

so dass der Code verwendet decision_function wenn es vorhanden ist. Auf dem SVM Fall wird predict_proba (im binären Fall) berechnet

Platt Verwendung

die is both "expensive" and has "theoretical issues" Skalierung. Deshalb wird hier decision_function verwendet. (wie @Ami sagte, dies ist die Marge - der Abstand zu der Hyperebene, die ohne viel weitere Berechnung zugänglich ist). Im SVM-Fall wird empfohlen,

decision_function statt predict_proba zu verwenden.

Es gibt andere decision_function s: SGDClassifier's. Hier ist predict_proba von der Verlustfunktion abhängig und decision_function ist universell verfügbar.

Verwandte Themen