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.