【问题标题】:RandomizedSearchCV precision score doesn't match in Random ForestRandomizedSearchCV 精度分数在随机森林中不匹配
【发布时间】:2018-12-12 19:35:16
【问题描述】:

我正在尝试使用 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

知道为什么会发生这种情况吗?我做错了什么?

【问题讨论】:

    标签: python scikit-learn random-forest grid-search


    【解决方案1】:

    这里有很多需要注意的地方。

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

    2) RandomizedSearchCV 将在找到最佳参数组合(产生best_score_ 的参数组合)后对(拟合)整个数据进行训练。因此,当您在相同的数据上得分时,预计会给出更高的结果。

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

    average_precision_scorer = make_scorer(average_precision_score,
                                           needs_threshold=True)
    

    这里的参数needs_thresholdTrue,这意味着记分员需要估算器的predict_proba()decision_function() 的输出。所以你的第二个输出best_estimator_avg_precision 是不可比的。

    对于您的best_estimator_avg_precision_probs,请执行此操作以检查是否有任何不同:-

    best_estimator_avg_precision_probs = average_precision_score(y, 
                          randsearch.best_estimator_.predict_proba(X))
    

    但是,由于第 2 点,分数会更高。

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 2013-05-04
      • 2023-04-09
      • 2021-07-12
      • 2019-09-05
      • 2020-05-27
      • 1970-01-01
      • 2018-10-18
      • 2019-03-14
      相关资源
      最近更新 更多