2012-03-16 13 views
5

Sto addestrando un classificatore svm con convalida incrociata (stratifiedKfold) utilizzando le interfacce di scikits. Per ogni set di test (di k), ottengo un risultato di classificazione. Voglio avere una matrice di confusione con tutti i risultati. Scikits ha un'interfaccia a matrice di confusione: sklearn.metrics.confusion_matrix (y_true, y_pred) La mia domanda è come devo accumulare i valori y_true e y_pred. Sono matrici (numpy). Devo definire la dimensione degli array in base al mio parametro k-fold? E per ogni risultato dovrei aggiungere y_true e y-pred alla matrice ????matrice di confusione di scikits con convalida incrociata

+2

Ho una soluzione per questo problema. Per ogni iterazione (attraverso la mia k-fold) creo una "matrice di confusione" che aggiungo alla precedente. In questo modo ottengo un CN che contiene tutti i valori. Con numpy è facile costruire questa matrice cumulativa (cm + = cm) – user963386

+0

Ma ho ancora il problema se voglio ottenere un rapporto accumulato su precisione/richiamo (classification_report). Ogni iterazione avrà un "y_true", y_pred. "Come ottengo un rapporto finale? – user963386

+0

Durante la convalida incrociata, y_true sarà costante .Per y_pred, puoi seguire la stessa procedura come la matrice di confusione. Prendi previsioni complessive/totali –

risposta

2

È possibile utilizzare una matrice di confusione aggregata o calcolare una per ogni partizione CV e calcolare la media e la deviazione standard (o errore standard) per ciascun componente nella matrice come misura della variabilità.

Per il report di classificazione, il codice dovrebbe essere modificato per accettare gli input bidimensionali in modo da passare le previsioni per ciascuna partizione CV e quindi calcolare i punteggi medi e la deviazione standard per ogni classe.

+1

Come si può creare una matrice di confusione aggregata? – Merlin

+0

Il codice sarebbe utile ... – Merlin

Problemi correlati