2012-08-31 13 views
5

Sto utilizzando l'interfaccia Python per libsvm e quello che sto notando è che dopo aver selezionato i migliori parametri C e gamma (kernel RBF) utilizzando la ricerca griglia, quando I addestrare il modello e cross validarlo (5 volte, se è rilevante), la precisione che ricevo è uguale al rapporto tra le etichette nel mio set di dati di allenamento.libsvm - Accuratezza di convalida incrociata uguale al rapporto delle etichette

Ho 3947 campioni e 2898 di essi hanno l'etichetta -1 e il resto ha l'etichetta 1. Quindi questo è il 73,4229% dei campioni.

E quando mi alleno il modello e croce convalidarlo 5 pieghe, questo è ciò che ottengo -

optimization finished, #iter = 1529 
nu = 0.531517 obj = -209.738688, 
rho = 0.997250 nSV = 1847, nBSV = 1534 
Total nSV = 1847 
Cross Validation Accuracy = 73.4229% 

questo significa che l'SVM non sta prendendo le caratteristiche in considerazione? O che sono i dati in difetto qui? Sono entrambi legati? Non riesco a superare il numero 73.4229. Inoltre, il numero di vettori di supporto dovrebbe essere molto inferiore alla dimensione del set di dati, ma in questo caso non sembra così.

In generale, che cosa significa quando la precisione della convalida incrociata è uguale al rapporto delle etichette nel set di dati?

risposta

6

Il tuo set di dati non è bilanciato, il che significa che una grande percentuale è della stessa classe. Ciò si traduce in un classificatore predefinito o di classe maggioritaria, in cui viene ottenuta un'accuratezza elevata semplicemente classificando tutto come parte della classe di maggioranza. Quindi hai ragione che non tiene conto delle caratteristiche, a causa dei dati.

Il README di libsvm suggerisce di variare i pesi di penalità per far fronte a questo. Ed ecco una domanda correlata: https://stats.stackexchange.com/questions/20948/best-way-to-handle-unbalanced-multiclass-dataset-with-svm

Per ulteriori informazioni sui dati sbilanciati, vedere la sezione 7 di A User's Guide to Support Vector Machines.

Problemi correlati