2015-07-14 10 views
5

Sto utilizzando LogisticRegression dal pacchetto sklearn e ho una breve domanda sulla classificazione. Ho costruito una curva ROC per il mio classificatore e si scopre che la soglia ottimale per i miei dati di allenamento è intorno a 0,25. Presumo che l'impostazione predefinita durante la creazione di previsioni in 0,5. Come posso modificare questa impostazione predefinita per scoprire qual è la precisione nel mio modello quando eseguo una convalida incrociata di 10 volte? Fondamentalmente, voglio che il mio modello preveda un '1' per chiunque sia maggiore di 0.25, non di 0.5. Ho esaminato tutta la documentazione e non riesco ad arrivare da nessuna parte.sklearn LogisticRegression e modifica della soglia predefinita per la classificazione

Grazie in anticipo per il vostro aiuto.

risposta

4

Questa non è una funzione incorporata. Puoi "aggiungerlo" inserendo la classe LogisticRegression nella tua classe e aggiungendo un attributo threshold che usi all'interno di un metodo personalizzato predict().

Tuttavia, alcune precauzioni:

  1. La soglia predefinita è in realtà 0. LogisticRegression.decision_function() restituisce una distanza firmato all'iperpiano di separazione selezionato. Se stai guardando predict_proba(), allora stai guardando logit() della distanza iperpenna con una soglia di 0,5. Ma è più costoso da calcolare.
  2. Selezionando la soglia "ottimale" in questo modo, si utilizzano le informazioni post-apprendimento, che rovinano il set di test (ovvero, il test o il set di convalida non fornisce più una stima obiettiva di errore out-of-sample). Si può quindi indurre un sovradimensionamento aggiuntivo a meno che non si scelga la soglia all'interno di un ciclo di convalida incrociata solo sul set di allenamento, quindi usarlo e il classificatore addestrato con il proprio set di test.
  3. Considerare l'utilizzo di class_weight se si verifica un problema sbilanciato anziché impostare manualmente la soglia. Questo dovrebbe costringere il classificatore a scegliere un iperpiano più lontano dalla classe di serio interesse.
+0

Sto avendo un problema simile, dove i miei falsi negativi e veri negativi sono molto bassi. È possibile inclinare l'input 'z' nella funzione logit (funzione sigmoid) tramite un parametro, facendo il prob quando 'z = 2' a .5, invece di quando' z = 0 'è .5? Grazie. – Moondra

+0

Non è ancora possibile modificare la soglia decisionale? –

Problemi correlati