机器学习 cross_val_score 与 cross_val_predict

问题描述 投票:0回答:2

在构建通用评估工具时,我遇到了以下问题,其中 cross_val_score.mean() 给出的结果与 cross_val_predict 略有不同。

为了计算测试分数,我有以下代码,它计算每次折叠的分数,然后计算所有折叠的平均值。

testing_score = cross_val_score(clas_model, algo_features, algo_featurest, cv=folds).mean()

为了计算 tp、fp、tn、fn,我有以下代码,它计算所有折叠的这些指标(我假设是总和)。

test_clas_predictions = cross_val_predict(clas_model, algo_features, algo_featurest, cv=folds)
test_cm = confusion_matrix(algo_featurest, test_clas_predictions)
test_tp = test_cm[1][1]
test_fp = test_cm[0][1]
test_tn = test_cm[0][0]
test_fn = test_cm[1][0]

这段代码的结果是:

                         algo      test  test_tp  test_fp  test_tn  test_fn
5                  GaussianNB  0.719762       25       13      190       71
4          LogisticRegression  0.716429       24       13      190       72
2      DecisionTreeClassifier  0.702381       38       33      170       58
0  GradientBoostingClassifier  0.682619       37       36      167       59
3        KNeighborsClassifier  0.679048       36       36      167       60
1      RandomForestClassifier  0.675952       40       43      160       56

因此,选择第一行 cross_val_score.mean() 给出 0.719762 (测试)并通过计算分数 25+190/25+13+190+71=0.719063545150... ((tp+tn)/(tp+tn+fp +fn)) 略有不同。

我有机会从 quora 的一篇文章中读到这一点:“在 cross_val_predict() 中,元素的分组方式与 cross_val_score() 中的稍有不同。这意味着当您使用这些函数计算相同的指标时,您可以获得不同的结果。 ”

这背后有什么特殊原因吗?

python validation machine-learning scikit-learn scoring
2个回答
2
投票

这也在

cross_val_predict
的文档中被提及:

将这些预测传递到评估指标中可能不是衡量泛化性能的有效方法。结果可能与

cross_validate
cross_val_score
不同,除非所有测试集具有相同的大小并且度量在样本上分解。

在您的情况下,您的指标似乎是准确性,这确实会分解样本。但有可能(实际上很可能,因为总大小不是高度可整除的 299)您的测试折叠的大小不同,这可以解释两者之间非常小的(相对)差异。


0
投票

@bmreiniger,在许多询问有关

cross_val_predict
问题的帖子中,例如,使用 cross_val_score 计算的指标与从 cross_val_predict 开始计算的相同指标有何不同?,对其作用存在普遍误解。或者更准确地说,它不做什么。
cross_val_predict
返回分数,它返回交叉验证过程中做出的样本外预测。通过将这些预测与真实值相结合,分解为折叠,可以计算每个折叠的模型得分,这就是
cross_val_score
的作用。

每个折叠都有一组样本,用于在该折叠上训练模型,并设置一组测试样本,用于使用该模型进行预测。一旦掌握了这些预测,它们就会与测试集的真实值相结合,以对该折叠的模型进行评分。

cross_val_predict
所做的就是使用该折叠的训练集为给定折叠创建一个模型,然后使用该折叠的测试集进行预测。最后,它只是将预测堆叠在所有折叠上,并返回这堆预测,按折叠排序。

cross_val_predict
的结果在许多应用中非常有用,例如,绘制交叉验证结果图、Bootstrap Bias Corrected Cross-Validation,以及(如果计算正确)模型得分。假设
cross_val_predict
用于对模型进行评分。仅当其结果经过适当的后处理时,这才是正确的!

更多详情请参阅:

https://stackoverflow.com/a/77851344/4241746

https://stackoverflow.com/a/77847608/4241746

© www.soinside.com 2019 - 2024. All rights reserved.