Python 为什么scikit学习中的参数搜索不需要scorer导入?

Python 为什么scikit学习中的参数搜索不需要scorer导入?,python,scikit-learn,python-import,Python,Scikit Learn,Python Import,如果我想根据ROC曲线下的面积优化逻辑回归模型(例如)的正则化参数,我可以使用GridSearchCV获得合适的参数范围,并设置scoring='ROC\u auc' 这可以使用sklearn.model\u selection import GridSearchCV中的完成,而不需要包含sklearn.metrics import roc\u auc\u score中的 但是,如果我想为特定拟合数据集手动计算ROC曲线下的面积,那么我确实需要包括来自sklearn.metrics import

如果我想根据ROC曲线下的面积优化逻辑回归模型(例如)的正则化参数,我可以使用
GridSearchCV
获得合适的参数范围,并设置
scoring='ROC\u auc'

这可以使用sklearn.model\u selection import GridSearchCV中的
完成,而不需要包含sklearn.metrics import roc\u auc\u score中的

但是,如果我想为特定拟合数据集手动计算ROC曲线下的面积,那么我确实需要包括来自sklearn.metrics import ROC\u auc\u score的

  • 这是怎么回事?我假设通过导入
    GridSearchCV
    我们在幕后导入了
    roc\u auc\u分数
    ?不幸的是,我似乎无法在未来完成这一点-我真的很感谢你的解释
  • 如果是这种情况,是否也意味着通过导入
    GridSearchCV
    我们最终会在幕后导入所有可能的评分方法
  • 那么,如果我只导入了
    GridSearchCV
    ,而没有导入
    roc\u auc\u分数
    本身,为什么我不能自己“手动”使用
    roc\u auc\u分数?这不是在幕后隐含的“存在”吗

我理解这可能是一个关于python导入的更一般的问题,而不是特定于scikit learn…

GridSearchCV扩展了BaseSearchCV类。这意味着它将使用

现在,正如您在中所看到的:

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

方法
\u检查\u多重度量\u评分
指向:

与跟踪方法调用类似,我们:

查看《代码》roc_auc
,我们将:

现在看看这里的参数,
roc\u auc\u得分
被发送到
make\u 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正确地说的,这些导入是该模块的本地导入,而不是全局导入

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


GridSearchCV扩展了BaseSearchCV类。这意味着它将使用

现在,正如您在中所看到的:

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

方法
\u检查\u多重度量\u评分
指向:

与跟踪方法调用类似,我们:

查看《代码》roc_auc
,我们将:

现在看看这里的参数,
roc\u auc\u得分
被发送到
make\u 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如何进行模块和导入<代码>roc_auc_分数
可以通过
GridSearchCV
导入,但它将是本地的,不在全局名称空间中。感谢链接-如果我理解正确,我认为
roc_auc_score
可能正在以某种方式导入,但没有添加到我的全局符号表中-但最好确认我的理解!这将使您更容易理解:
dir()
。如果我理解正确,您只需要了解Python是如何进行模块和导入的<代码>roc_auc_分数可以通过
GridSearchCV
导入,但它将是本地的,不在全局名称空间中。感谢链接-如果我理解正确,我认为
roc_auc_score
可能正在以某种方式导入,但没有添加到我的全局符号表中-但最好确认我的理解!这将使您更容易理解:
dir()
。谢谢-这非常有帮助。我假设当你说“跟踪方法调用…”时,你所指的一系列调用是
\u check\u multimetric\u scoring
->
check\u scoring
->
get\u scorer
->
SCORERS
。我也花了几分钟才意识到这一点。导入可以引用同一级别的其他模块,
roc\u auc\u分数
实际上是在兄弟模块
排名.py中定义的(除非我完全误读了代码)@Nick是的,你是对的。就像linux命令一样,
from。导入
指的是同一文件夹中的文件,而
指的是来自。。导入
转到根级别。是的,但实际上是同一文件夹中文件中的方法,这让我很吃惊。事实上[未来读者注意!]您提供的其他问题的链接非常有用,因为如果不知道正确的搜索术语,就很难找到这些信息。不,我认为您弄错了。我想我解释错了<代码>从。导入
仅在文件夹中的
\u init\upy
文件下的
\uuuuuu all\uuuu
中声明的导入成功。在该文件中进行的所有导入都可以直接从中使用
。导入
。在前面的评论中,我解释了以下类型的相对导入:roc_auc_scorer = make_scorer(roc_auc_score, greater_is_better=True, needs_threshold=True)
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)