Nominalmente es un buen problema, pero estoy bastante seguro de que es algo gracioso que está pasando ...Ayuda - 100% de precisión con LibSVM?
Como contexto, estoy trabajando en un problema en el espacio de expresión/reconocimiento facial, por lo que El 100% de precisión parece increíblemente inverosímil (aunque no es plausible en la mayoría de las aplicaciones ...). Supongo que hay un sesgo constante en el conjunto de datos que hace que sea demasiado fácil para un SVM extraer la respuesta, = o =, más probablemente, he hecho algo mal en el lado de SVM.
Estoy buscando sugerencias para ayudar a entender lo que está sucediendo - ¿es yo (= mi uso de LibSVM)? ¿O son los datos?
Los detalles:
- Acerca de ~ 2500 marcado vectores de datos/instancias (fotogramas de vídeo transformadas de individuos-- < 20 personas individuales en total), problema de clasificación binaria. ~ 900 características/instancia. Conjunto de datos desequilibrado en una proporción de 1: 4.
- Ran subset.py para separar los datos en prueba (500 instancias) y en tren (restante).
- Ran "svm-train -t 0". (Nota: aparentemente no es necesario '-w1 1 -w-1 4' ...)
- Ejecutar svm-predict en el archivo de prueba. Exactitud = 100%!
Cosas trataron:
- A cuadros alrededor de 10 veces más que yo no estoy entrenando & las pruebas en los mismos archivos de datos, a través de algunos de línea de comandos de error involuntario argumento
- re-ran subconjunto. py (incluso con -s 1) varias veces y entrenó/probar solo múltiples conjuntos de datos diferentes (en caso de que aleatoriamente en el tren/prueba más mágico pa
- ejecuté un simple cheque de tipo diff para confirmar que el archivo de prueba está no es un subconjunto de los datos de entrenamiento
- svm-scale en los datos no tiene efecto en la precisión (precisión = 100%). (Aunque el número de vectores de soporte cae desde nSV = 127, bSV = 64 a nBSV = 72, bSV = 0)
- ((raro)) utilizando el kernel RBF predeterminado (vice lineal - es decir, eliminando '- t 0 ') resultados en la precisión que va a la basura (?!)
- (comprobación de cordura) ejecutar svm-predict utilizando un modelo entrenado en un conjunto de datos escalado contra un conjunto de datos sin escala resultados en la precisión = 80% (es decir, siempre adivina la clase dominante). Esto es estrictamente un control de cordura para asegurarse de que de alguna manera svm-predict esté actuando nominalmente en mi máquina.
conclusión provisional ?:
algo con los datos es wacked - de alguna manera, dentro del conjunto de datos, hay un efecto sutil, experimentador impulsada por la SVM que está recogiendo sucesivamente.
(Esto no significa, en la primera pasada, a explicar por qué el kernel RBF da resultados de basura, sin embargo.)
agradecería mucho cualquier sugerencia sobre: a) cómo solucionar mi uso de LibSVM (si es que en realidad es el problema) o b) determinar qué sesgo sutil del experimentador en los datos LibSVM está tomando impulso.
Mmmm, datos y análisis del modelo en condiciones de plena competencia. Posible, pero realmente, muy lento. Esto podría ser bastante desafiante. ¿Hay alguna posibilidad de que puedas publicar los datos? Es casi seguro que los datos, pero que alguien más lo reproduzca podría ser útil. Además, si dominas R, eso podría facilitar el asesoramiento. – Iterator
Por "lento", quiero decir que es posible recomendar una variedad de pruebas, pasos para probar, cosas para investigar, etc., pero todo el proceso puede llevar algo de tiempo. Si has visto el episodio "House" "Frozen", la idea es similar. De lo contrario, el problema puede ser "demasiado local". – Iterator
lo más probable -) es que ha incluido sus datos de prueba en el conjunto de entrenamiento. Sé que lo has controlado, pero mira un poco más. – bmargulies