在构建通用评估工具时,我遇到了以下问题,其中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()略有不同,这意味着当您使用这些函数计算相同的度量时,可以得到不同的结果。”
有什么特别的原因吗?
发布于 2021-02-03 21:09:31
cross_val_predict的文档中也提到了这一点。
将这些预测传递到评估度量中的
可能不是衡量泛化性能的有效方法。结果可能与
cross_validate和cross_val_score不同,除非所有测试集都具有相同的大小,并且对样本进行度量分解。
看起来,在你的例子中,你的度量是精确的,它会对样本进行分解。但是有可能(实际上很可能,因为总尺寸是不可高度可除的299),你的测试褶皱不一样大小,这可以解释两者之间非常小(相对)的差异。
https://stackoverflow.com/questions/66034846
复制相似问题