机器学习 cross_val_score 对比 cross_val_predict
MachineLearning cross_val_score vs cross_val_predict
在构建通用评估工具时,我遇到了以下问题,其中 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() 中的略有不同。这意味着当你计算相同的指标使用这些函数,你会得到不同的结果。"
这背后有什么特别的原因吗?
cross_val_predict
的文档中也提到了这一点:
Passing these predictions into an evaluation metric may not be a valid way to measure generalization performance. Results can differ from cross_validate
and cross_val_score
unless all tests sets have equal size and the metric decomposes over samples.
在您的情况下,您的指标似乎是准确度,确实 分解样本。但是有可能(实际上很可能,因为总大小是不可高度整除的 299)您的测试折叠大小不同,这可以解释两者之间非常小的(相对)差异。
在构建通用评估工具时,我遇到了以下问题,其中 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() 中的略有不同。这意味着当你计算相同的指标使用这些函数,你会得到不同的结果。"
这背后有什么特别的原因吗?
cross_val_predict
的文档中也提到了这一点:
Passing these predictions into an evaluation metric may not be a valid way to measure generalization performance. Results can differ from
cross_validate
andcross_val_score
unless all tests sets have equal size and the metric decomposes over samples.
在您的情况下,您的指标似乎是准确度,确实 分解样本。但是有可能(实际上很可能,因为总大小是不可高度整除的 299)您的测试折叠大小不同,这可以解释两者之间非常小的(相对)差异。