Actualmente estoy usando Scikit learn con el siguiente código:
clf = svm.SVC(C=1.0, tol=1e-10, cache_size=600, kernel='rbf', gamma=0.0,
class_weight='auto')
y luego ajusta y predice un conjunto de datos con 7 etiquetas diferentes. Tengo una salida extraña. No importa qué técnica de validación cruzada use, la etiqueta predicha en el conjunto de validación siempre será la etiqueta 7.
Intento algunos otros parámetros, incluido el predeterminado completo ( svm.SVC()
), pero siempre que el método del núcleo que utilizo sea en rbf
lugar de poly
o linear
simplemente no funcione, mientras que funciona realmente bien para poly
y linear
.
Además, ya he intentado la predicción en los datos del tren en lugar de los datos de validación y encaja perfectamente.
¿Alguien ve este tipo de problema antes y sabe lo que está pasando aquí?
Nunca miro la distribución de mi clase en detalle, pero sé que debería ser alrededor del 30% de ellos son 7, 14% son 4.
Incluso pruebo una implementación manual 1-vs-rest y todavía no es útil.
fuente
Respuestas:
Una causa probable es el hecho de que no está ajustando su modelo. Necesita encontrar buenos valores para y . En su caso, los valores predeterminados resultan ser malos, lo que lleva a modelos triviales que siempre producen cierta clase. Esto es particularmente común si una clase tiene muchas más instancias que las otras. ¿Cuál es su distribución de clase?γC γ
scikit-learn tiene capacidades limitadas de búsqueda de hiperparámetros, pero puede usarlo junto con una biblioteca de ajuste como Optunity . Un ejemplo acerca de cómo ajustar scikit-learn SVC con Optunity está disponible aquí .
Descargo de responsabilidad: soy el desarrollador principal de Optunity.
fuente
El problema resulta ser la prueba de parámetros. No lo intenté cuando
gamma
está entre 0.0 (que es 1 / n_feature) y 1. En mis datosgamma
debería cambiar a algo1e-8
fuente