MachineLearning cross_val_score与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_fn5                  GaussianNB  0.719762       25       13      190       714          LogisticRegression  0.716429       24       13      190       722      DecisionTreeClassifier  0.702381       38       33      170       580  GradientBoostingClassifier  0.682619       37       36      167       593        KNeighborsClassifier  0.679048       36       36      167       601      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)不是一个高度可分的数字,你的测试折叠可能大小不一,这可能解释了两个结果之间非常小的(相对的)差异。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注