3 votos

¿Por qué mi modelo tiene siempre peores resultados en la validación cruzada?

Bien, ejecuto este modelo manualmente y obtengo alrededor de un 80-90% de precisión:

mlp = MLPClassifier(hidden_layer_sizes=(
    50, 50), activation="logistic", max_iter=500)
mlp.out_activation_ = "logistic"
mlp.fit(X_train, Y_train)
predictions = mlp.predict(X_test)
print(confusion_matrix(Y_test, predictions))
print(classification_report(Y_test, predictions))

Luego, hago una validación cruzada de 10 veces:

print(cross_val_score(mlp, X_test, Y_test, scoring='accuracy', cv=10))

Y obtengo estadísticas de precisión algo como lo siguiente para cada pliegue:

[0.72527473 0.72222222 0.73333333 0.65555556 0.68888889 0.70786517 0.69662921 0.75280899 0.68539326 0.74157303]

Ya he hecho esto unas 5 veces. Cada vez que ejecuto el modelo por sí solo, obtengo una precisión del 80-90%, pero luego, cuando ejecuto la validación cruzada, mi modelo obtiene una media del 10-20% menos que cuando el modelo se ejecuta una vez manualmente.

Las posibilidades de obtener el mejor modelo a la primera, cinco veces seguidas, son de 1 entre 161.051 (1/11 ^ 5). Así que debo estar haciendo algo mal en alguna parte.

¿Por qué mi modelo tiene siempre peores resultados en la validación cruzada?

EDIT - Me gustaría añadir que estoy haciendo exactamente lo mismo con un RandomForestClassifier() y obteniendo los resultados esperados, es decir, la precisión obtenida cuando ejecuto el modelo manualmente es más o menos la misma que cuando lo ejecuta el cross_val_score() función. Entonces, ¿qué es lo que tiene mi MLPClassifier() que está produciendo este desajuste en la precisión?

3voto

Hereinoz Puntos 1

Contexto : El método de validación cruzada y el método de retención (división entrenamiento-prueba) se consideran dos métodos para evaluar el rendimiento del modelo. El objetivo de esta evaluación es obtener una estimación del error de generalización (o, de prueba).

Resumen : Si la precisión del método de validación cruzada es menor que la precisión del método de retención, indica que el modelo está sobreajustado.

Explicación : Cuando el error de la prueba se estima mediante el método de retención, los datos se dividen en muestras de entrenamiento y de retención. Sin embargo, esta división puede inducir un sesgo, ya que no hay garantía de aleatoriedad en las muestras de entrenamiento y de prueba, incluso si todo el conjunto de datos se considera una muestra aleatoria. Para mitigar este sesgo, podemos promediar el error de prueba procedente de diferentes muestras de prueba. Esto es precisamente lo que hace la validación cruzada: gira la muestra de prueba por todo el conjunto de datos y, para cada muestra de prueba, el conjunto de datos restante se convierte en la muestra de entrenamiento. Para cada división, el error de prueba se calcula después de ajustar el modelo a la muestra de entrenamiento correspondiente. Los errores de prueba de cada división se promedian para obtener el error de prueba medio, o el error de validación cruzada.

En ausencia de validación cruzada, es posible que el modelo quede sesgado por la división (sesgada) de los datos. Esto da lugar a sobreajuste . El sobreajuste es el resultado de que el modelo memorice los ejemplos de entrenamiento (y, por tanto, capte el ruido) en lugar de aprender realmente (o identificar el verdadero patrón/relación) a partir de los ejemplos de entrenamiento.

Sólo cuando no hay ruido en los datos ( que es poco probable en el mundo real ) y el modelo asumido refleja la verdadera relación ( que suele ser difícil de conocer sin el conocimiento del dominio ), los métodos de retención y de validación cruzada proporcionan la misma precisión.

Espero que esto ayude.

1voto

Karin Puntos 11

Creo que hay cierta confusión en cuanto a la base de lo que se observa aquí. En primer lugar, se entrena un modelo contra el Tren X/formación Y conjunto de datos. Al probar este modelo con el X_test/Y_test (holdout), se observa una precisión del 80-90%. A continuación, se realizó una validación cruzada. Se obtiene una puntuación de pliegues basada en la Tren X/formación Y conjunto de datos.

La pregunta que se hizo fue por qué la puntuación de la retención X_test/Y_test es diferente de las puntuaciones de 10 veces del conjunto de entrenamiento Tren X/formación Y . Creo que el problema es que según el código dado en la pregunta, las métricas se están obteniendo en diferentes conjuntos de datos. La puntuación del 80-90% proviene de la ejecución de mlp.predict() contra el prueba mientras que la precisión del 60-70% proviene de la obtención de puntuaciones de pliegues para el tren conjunto de datos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X