RandomizedSearchCV精度分数在Random Fores中不匹配

2024-03-28 09:02:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用RandomizedSearchCV对一个随机森林进行一些超参数优化。我将评分方法设置为平均精度rand_search.best_score_大约是0.38(对于我的数据集来说这是一个合理的结果),但是当我使用rand_search.best_estimator_计算相同的平均精度分数时,结果接近于1(见下文)。在

clf = RandomForestClassifier()
randsearch = RandomizedSearchCV(clf,
                                scoring='average_precision',
                                param_distributions=parameters,
                                n_iter=1,
                                cv=StratifiedShuffleSplit(n_splits=10),
                                n_jobs=1, 
                                verbose=2)

randsearch.fit(X, y)
randomized_best_score = randsearch.best_score_

best_estimator_avg_precision = average_precision_score(y, 
                               randsearch.best_estimator_.predict(X))

best_estimator_avg_precision_probs = average_precision_score(y, 
                          randsearch.best_estimator_.predict_proba(X)[:, 1])

print(randomized_best_score)
print(best_estimator_avg_precision)
print(best_estimator_avg_precision_probs)

>>> randomized_best_score: 0.3836
>>> best_estimator_avg_precision: 0.983577210629
>>> best_estimator_avg_precision_probs: 1.0

知道为什么会这样吗?我做错什么了?在


Tags: search精度precisionavgbestscoreprintaverage
1条回答
网友
1楼 · 发布于 2024-03-28 09:02:41

这里有很多事情需要注意。在

1)randsearch.best_score_是相对于训练数据的测试折叠的平均分数,因此在使用完整数据计算分数时将不匹配。在

2)在找到最佳参数组合(产生best_score_的参数组合)后,将对(拟合)整个数据进行训练。所以,当你在相同的数据上得分时,你会得到更高的结果。在

3)当您指定scoring='average_precision'时,在内部将其转换为以下内容:

average_precision_scorer = make_scorer(average_precision_score,
                                       needs_threshold=True)

参数needs_threshold在这里是True,这意味着记分器需要来自估计器的predict_proba()或{}的输出。所以你的第二个输出best_estimator_avg_precision是不可比的。在

对于您的best_estimator_avg_precision_probs,请执行此操作以检查它是否生成任何d差异:在

^{pr2}$

不过,由于第2点,分数还是会更高。在

相关问题 更多 >