[英]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 (test) 並通過計算得分 25+190/25+13+190+71=0.719063545150... ((tp+tn)/(tp+tn+fp+ fn)) 略有不同。
我有機會從 quora 的一篇文章中讀到:“在 cross_val_predict() 中,元素的分組方式與 cross_val_score() 中的略有不同。這意味着當您使用這些函數計算相同的指標時,您可以獲得不同的結果。”
這背后有什么特別的原因嗎?
cross_val_predict
的文檔中也提到了這一點:
將這些預測傳遞到評估指標中可能不是衡量泛化性能的有效方法。 結果可能與
cross_validate
和cross_val_score
不同,除非所有測試集都具有相同的大小,並且度量標准在樣本上分解。
在您的情況下,您的指標似乎是准確性,它確實會分解樣本。 但是有可能(實際上很可能,因為總大小不是高度可分的 299)您的測試折疊大小不同,這可以解釋兩者之間非常小的(相對)差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.