Scikit学习:默认情况下,当needs_threshold = True时,哪些值提供给记分员?

时间:2018-08-18 12:15:55

标签: scikit-learn

在二进制分类设置中,根据ROC下的面积调整模型需要对模型输出进行阈值设置。

但是,在scikit-learn中,默认情况下,支持向量分类器不会生成类概率。

因此,例如,将GridSearchCVscoring=make_scorer(roc_auc_score, needs_threshold=False)一起使用来调整SVC模型是不正确的,因为AUC分数将根据每个类别中的预测类别计算得出简历折。无论我们使用SVC(probability=True)还是SVC(probability=False),都会发生这种情况。另一方面,scoring=make_scorer(roc_auc_score, needs_threshold=True)将正确调整。

因此,SVC必须将一些“阈值”输出传递给GridSearchCV中的评分功能。 我们如何知道给定模型的阈值输出是什么?

对于SVC,我假设调用了decision_function()方法。 (我假设它不是在计算类概率,因为使用predict_proba()时无法在合适的GridSearchCV对象上运行SVC(probability=False))。但是从文献来看,(至少对我而言)尚不清楚这确实是正在发生的事情。

1 个答案:

答案 0 :(得分:1)

是的,您是正确的。

来自source-code of make_scorer

....
elif needs_threshold:
    cls = _ThresholdScorer
....

因此,当needs_threshold = True时,将使用_ThresholdScorer得分手。现在查看source code of _ThresholdScorer,我们会看到:

....
....
        try:
            y_pred = clf.decision_function(X)

            # For multi-output multi-class estimator
            if isinstance(y_pred, list):
                y_pred = np.vstack(p for p in y_pred).T

        except (NotImplementedError, AttributeError):
            y_pred = clf.predict_proba(X)

因此,这将首先调用估计器的decision_function()来找到阈值。