es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Precisión en el informe de clasificación menor que el mejor estimador de GridSearchCV.

Realicé una búsqueda en cuadrícula en un MLPClassifier.

¿Por qué la precisión en el informe de clasificación (0.76) no es idéntica a la puntuación de prueba de división más alta (en este caso 0.80) en el marco de datos?

Salida:

enter image description here

Código:

X, y = make_classification(n_samples=200, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=1)
param_grid = {'learning_rate_init': [1e-5,1e-4], 'hidden_layer_sizes': [(50,),(50,50)],'max_iter':[100], 'activation':['logistic','relu']}

print("Buscando los hyperparámetros óptimos dentro de la cuadrícula especificada...")
grid = GridSearchCV(MLPClassifier(), param_grid, verbose=0, cv=5, scoring='accuracy')
a = grid.fit(X_train, y_train)
grid_predictions = a.best_estimator_.predict(X_test)

cm = sklearn.metrics.confusion_matrix(y_test, grid_predictions)
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=grid.classes_)
disp.plot(cmap='Blues')
plt.show()

print(sklearn.metrics.classification_report(y_test,grid_predictions, digits=6))
print("MEJORES PARÁMETROS ENCONTRADOS:",format(grid.best_params_))
print("MEJOR - Precisión media:",format(round(grid.cv_results_['mean_test_score'][grid.best_index_],6)))
print("MEJOR - Desviación estándar de precisión:",format(round(grid.cv_results_['std_test_score'][grid.best_index_],3)))
print("MEJOR - Tiempo medio:",format(round(grid.cv_results_['mean_fit_time'][grid.best_index_],3))+"s")
print("MEJOR - Desviación estándar de tiempo:",format(round(grid.cv_results_['std_fit_time'][grid.best_index_],3))+"s")

pd.DataFrame(grid.cv_results_)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual la precisión en el informe de clasificación (0.76) no es idéntica a la puntuación de prueba más alta (en este caso, 0.80) en el dataframe, es porque el informe de clasificación considera todas las etiquetas en el conjunto de datos, mientras que la puntuación de prueba solo considera el conjunto de prueba utilizado para la validación durante la búsqueda en la grilla.

    Durante la búsqueda en la grilla, el conjunto de datos se divide en conjuntos de entrenamiento y validación varias veces (en este caso, 5 veces, como se especifica en el parámetro “cv”). Las puntuaciones de prueba divididas reportadas en el dataframe “cv_results_” son el promedio y la desviación estándar de las puntuaciones obtenidas en los conjuntos de validación durante la búsqueda.

    Por otro lado, el informe de clasificación se calcula en el conjunto de prueba independiente, que no se utiliza durante la búsqueda en la grilla. Este conjunto de prueba generalmente es más pequeño que los conjuntos de validación utilizados durante la búsqueda y puede contener diferentes distribuciones de etiquetas.

    Por lo tanto, es posible que la precisión obtenida en el conjunto de prueba sea diferente de las puntuaciones de prueba divididas reportadas en el dataframe “cv_results_”, ya que estas puntuaciones se calculan en diferentes conjuntos de datos.

    En general, es recomendable reportar tanto la puntuación de prueba dividida promedio como la precisión en el conjunto de prueba independiente al evaluar el rendimiento de un modelo de aprendizaje automático.

Comments are closed.