簡體   English   中英

機器學習 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 (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_validatecross_val_score不同,除非所有測試集都具有相同的大小,並且度量標准在樣本上分解。

在您的情況下,您的指標似乎是准確性,它確實會分解樣本。 但是有可能(實際上很可能,因為總大小不是高度可分的 299)您的測試折疊大小不同,這可以解釋兩者之間非常小的(相對)差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM