首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解滑板GridSearchCV的best_score_和best_estimator_

理解滑板GridSearchCV的best_score_和best_estimator_
EN

Stack Overflow用户
提问于 2017-11-03 10:24:12
回答 1查看 2.5K关注 0票数 0

在下面的代码中,我试图理解best_estimator_best_score_之间的联系。我认为我应该能够(至少是非常接近地)通过对best_score_的结果打分(至少是非常接近):

代码语言:javascript
复制
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import log_loss

classifier = GridSearchCV(LogisticRegression(penalty='l1'),
                          {'C':10**(np.linspace(1,6,num=11))},
                          scoring='neg_log_loss')

classifier.fit(X_train, y_train)

y_pred = classifier.best_estimator_.predict(X_train)
print(f'{log_loss(y_train,y_pred)}') 
print(f'{classifier.best_score_}')

但是,我得到了以下输出(在不同的运行中,数字变化不大):

代码语言:javascript
复制
7.841241697018637
-0.5470694752031108

我知道best_score_将被计算为交叉验证迭代的平均值,但是这肯定是一个近似(甚至是无偏估计?)计算整个集的度量值。我不明白它们为什么如此不同,所以我假设我犯了一个实现错误。

我如何自己计算classifier.best_score_呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 10:30:42

Log_loss主要是为predict_proba()定义的。我假设GridSearchCV在内部调用predict_proba,然后计算分数。

请将predict()更改为predict_proba(),您将看到类似的结果。

代码语言:javascript
复制
y_pred = classifier.best_estimator_.predict_proba(X)

print(log_loss(y_train,y_pred)) 
print(classifier.best_score_)

在虹膜数据集上,我得到以下输出:

代码语言:javascript
复制
0.165794760809
-0.185370083771

看上去很接近。

更新:

看起来是这样的:当您将'loss_loss'作为字符串提供给GridSearchCV时,将这就是为什么初始化为要传递给GridSearchCV()方法的记分器。

代码语言:javascript
复制
log_loss_scorer = make_scorer(log_loss, greater_is_better=False,
                              needs_proba=True)

如您所见,needs_proba是真的,这意味着将使用predict_proba()来评分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47093415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档