2016-04-11 10 views
18

Sto studiando un (confronto Classificatore) scikit-learn example, ma ho confuso con predict_proba e decision_function.Qual è la differenza tra predict_proba e decision_function in scikit-learn?

Rappresentano i risultati della classificazione disegnando i contorni utilizzando Z = clf.decision_function() o Z = clf.predict_proba().

Quali sono le differenze tra questi due? È così che ogni metodo di classificazione ha uno dei due come punteggio?

quale è più corretto di interpretare il risultato di classificazione e come devo scegliere tra i due?

risposta

23

Quest'ultimo, predict_proba è un metodo di un (soft) classificatore emettere la probabilità dell'istanza essendo in ciascuna delle classi.

Il primo, decision_function, rileva la distanza all'iperpiano separazione. Ad esempio, un (n) classificatore SVM trova gli iperpiani che separano lo spazio in aree associate ai risultati della classificazione. Questa funzione, dato un punto, trova la distanza dai separatori.

Direi che il predict_prob è più utile nel tuo caso, in generale - l'altro metodo è più specifico dell'algoritmo.

+0

Grazie Ami! Mi sto ancora chiedendo cosa usano i classificatori per calcolare l'ultimo pronostico, decision_fuction o predict_prob? Questi due sembrano in qualche modo collegati, giusto? – Rosy

+0

Sì, sono effettivamente correlati; in particolare sono inversamente monotone. –

+0

@AmiTavory, posso chiedere di avere uno sguardo a una domanda scikit-learn correlati qui - https://stackoverflow.com/questions/48788611/python-find-document-similarity-to-show-related-ones? –

0

Il vostro esempio è

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] 

in modo che il codice utilizza decision_function se esiste. Sul caso SVM, predict_proba viene calcolata (nel caso binario)

utilizzando Platt scalatura

che is both "expensive" and has "theoretical issues". Ecco perché lo decision_function è usato qui. (Come detto @Ami, questo è il margine - la distanza all'iperpiano, che è accessibile senza molto maggiori di calcolo). Nel caso SVM, si consiglia di

utilizzare decision_function anziché predict_proba.

Ci sono altri decision_function s: SGDClassifier's. Qui, predict_proba dipende dalla funzione di perdita e decision_function è universalmente disponibile.