我想制作一个涉及分类概率的自定义评分函数,如下所示:
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)
有没有办法通过GridSearch将给定数据和参数的估算值传递给我的自定义评分函数?然后我可以使用estimator.classes_
例如:
def custom_score(y_true, y_pred_proba, clf):
class_labels = clf.classes_
error = ...
return error
答案 0 :(得分:6)
有另一种方法可以让得分手mentioned in the documentation。使用此方法,我可以执行以下操作:
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)
这可以避免使用sklearn.metrics.make_scorer
。
答案 1 :(得分:2)
根据make_scorer docs,它接收 ** kwargs:附加参数作为要传递给score_func的附加参数。
所以你可以把你的得分函数写成:
def custom_score(y_true, y_pred_proba, clf):
class_labels = clf.classes_
error = ...
return error
然后使用make_scorer:
my_scorer = make_scorer(custom_score, needs_proba=True, clf=clf_you_want)
此方法的好处是您可以轻松地将任何其他参数传递给您的分数功能。