Pase el estimador a la función de puntuación personalizada a través de sklearn.metrics.make_scorer

Me gustaría hacer una función de puntuación personalizada que incluya las probabilidades de clasificación de la siguiente manera:

def custom_score(y_true, y_pred_proba): error = ... return error my_scorer = make_scorer(custom_score, needs_proba=True) gs = GridSearchCV(estimator=KNeighborsClassifier(), param_grid=[{'n_neighbors': [6]}], cv=5, scoring=my_scorer) 

¿Hay alguna manera de pasar el estimador, según lo ajuste GridSearch con los datos y parámetros dados, a mi función de puntuación personalizada? Entonces podría interpretar las probabilidades usando estimator.classes_

Por ejemplo:

 def custom_score(y_true, y_pred_proba, clf): class_labels = clf.classes_ error = ... return error 

Existe una forma alternativa de hacer un anotador mencionado en la documentación . Usando este método puedo hacer lo siguiente:

 def my_scorer(clf, X, y_true): class_labels = clf.classes_ y_pred_proba = clf.predict_proba(X) error = ... return error gs = GridSearchCV(estimator=KNeighborsClassifier(), param_grid=[{'n_neighbors': [6]}], cv=5, scoring=my_scorer) 

Esto evita el uso de sklearn.metrics.make_scorer .

Según los documentos de make_scorer , recibe ** kwargs: argumentos adicionales como parámetros adicionales para pasar a score_func.

Así que solo puedes escribir tu función de puntuación como:

 def custom_score(y_true, y_pred_proba, clf): class_labels = clf.classes_ error = ... return error 

Luego usa make_scorer como:

 my_scorer = make_scorer(custom_score, needs_proba=True, clf=clf_you_want) 

El beneficio de este método es que puede pasar cualquier otro parámetro a su función de puntuación fácilmente.