繁体   English   中英

为什么在scikit-learn中进行参数搜索时不需要导入计分器?

[英]Why is scorer import unnecessary for parameter search in scikit-learn?

如果要基于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吗? 不幸的是,我似乎无法在源代码中完全遵循它-我真的很感谢一个解释。
  • 如果是这样,是否还意味着通过导入GridSearchCV我们最终将所有可能的计分方法导入幕后?
  • 如果仅导入了GridSearchCV而不是roc_auc_score本身,为什么为什么roc_auc_score “手动”使用roc_auc_score 它不是在幕后暗中“存在”吗?

我赞赏这可能是关于python导入的更一般的问题,而不是特定于scikit-learn ...

GridSearchCV扩展了BaseSearchCV类。 这意味着它将使用BaseSearchCV中定义fit()函数

因此,现在您可以在源代码中看到此处

    ...
    ...
    scorers, self.multimetric_ = _check_multimetric_scoring(
    self.estimator, scoring=self.scoring)
    ...
    ...

它在此处检查GridSearchCV构建期间提供的所有参数。 对于'scoring'参数,其调用方法_check_multimetric_scoring() 现在,在此文件的顶部,您将看到许多导入。

_check_multimetric_scoring方法指向scorer.py文件

同样跟踪方法调用,我们将到达此处

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 ,我们将到达此处

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正确说的那样,这些导入在该模块中是本地的,而不是全局导入。

有关导入范围和名称空间的更多信息,请参见以下答案:

这个python文档页面

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM