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?