如果要基于ROC曲线下的面积为逻辑回归模型(例如)优化正则化参数,可以使用GridSearchCV
设置合适的参数范围,并设置scoring='roc_auc'
。
这可以使用from sklearn.model_selection import GridSearchCV
完成,并且不需要包含from sklearn.metrics import roc_auc_score
。
但是,如果要为特定的拟合数据集手动计算ROC曲线下的面积,则需要包含from sklearn.metrics import roc_auc_score
。
GridSearchCV
可以以某种方式在后台导入roc_auc_score
?不幸的是,我似乎无法在source code中继续进行此操作-非常感谢您的解释。GridSearchCV
我们最终将所有可能的计分方法导入幕后?roc_auc_score
而不是GridSearchCV
本身,为什么为什么我不能“手动”使用roc_auc_score
?是不是在幕后隐式地“有”?我很欣赏这可能是关于python导入的更普遍的问题,而不是特定于scikit-learn ...
答案 0 :(得分:3)
GridSearchCV扩展了BaseSearchCV类。这意味着它将使用fit()
function defined in BaseSearchCV。
现在,如您在source code here中所见:
...
...
scorers, self.multimetric_ = _check_multimetric_scoring(
self.estimator, scoring=self.scoring)
...
...
在此处检查GridSearchCV构建期间提供的所有参数。
对于'scoring'
参数,其调用方法_check_multimetric_scoring()
。现在,在此文件的顶部,您将看到许多导入。
方法_check_multimetric_scoring
指向scorer.py
file:
类似地跟踪方法调用,我们will reach here:
SCORERS = dict(explained_variance=explained_variance_scorer,
r2=r2_scorer,
neg_median_absolute_error=neg_median_absolute_error_scorer,
neg_mean_absolute_error=neg_mean_absolute_error_scorer,
neg_mean_squared_error=neg_mean_squared_error_scorer,
neg_mean_squared_log_error=neg_mean_squared_log_error_scorer,
accuracy=accuracy_scorer, roc_auc=roc_auc_scorer,
...
...
...
...
看roc_auc
,我们将reach here:
roc_auc_scorer = make_scorer(roc_auc_score, greater_is_better=True,
needs_threshold=True)
现在在这里查看参数,roc_auc_score
被发送到make_scorer
。那么它是从哪里进口的呢?查看该文件的顶部,您将看到以下内容:
from . import (r2_score, median_absolute_error, mean_absolute_error,
mean_squared_error, mean_squared_log_error, accuracy_score,
f1_score, roc_auc_score, average_precision_score,
precision_score, recall_score, log_loss,
balanced_accuracy_score, explained_variance_score,
brier_score_loss)
因此,从这里开始,实际的计分对象将返回到GridSearchCV。
现在,该库正在使用相对和绝对导入,正如@Denziloe正确说的那样,这些导入在该模块中是本地的,而不是全局导入。
有关导入范围和名称空间的更多信息,请参见以下答案: