通过sklearn.metrics.make_scorer将估算工具传递给自定义评分函数

时间:2016-06-27 23:13:36

标签: python scikit-learn

我想制作一个涉及分类概率的自定义评分函数,如下所示:

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

2 个答案:

答案 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)

此方法的好处是您可以轻松地将任何其他参数传递给您的分数功能。