【问题标题】:MachineLearning cross_val_score vs cross_val_predict机器学习 cross_val_score 与 cross_val_predict
【发布时间】:2021-05-08 02:48:42
【问题描述】:

在构建通用评估工具时,我遇到了以下问题,其中 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() 中略有不同。这意味着当您使用这些函数计算相同的指标时,您可以得到不同的结果。”

这背后有什么特别的原因吗?

【问题讨论】:

    标签: python validation machine-learning scikit-learn scoring


    【解决方案1】:

    cross_val_predict 的文档中也提到了这一点:

    将这些预测传递到评估指标中可能不是衡量泛化性能的有效方法。结果可能与cross_validatecross_val_score 不同,除非所有测试集的大小都相同并且指标分解为样本。

    在您的情况下,您的指标似乎是准确性,确实分解了样本。但有可能(实际上很可能,因为总大小不是高度可整的 299)您的测试折叠大小不同,这可以解释两者之间非常小的(相对)差异。

    【讨论】:

    • 褶皱的大小可能不同是什么意思?两者的样本相同,并且 folds 参数设置为 20。
    • 而 299/20 不是整数。所以大多数折叠的大小为 15,但一个只有 14 大小(这是假设您的 cv-object 不会尝试平衡目标类并更多地违反等大小保护)。
    • 嗯,这看起来很有趣,现在我完全明白你的意思了。非常感谢本!
    • 我在数据集中添加了一个样本进行检查,现在两者完全相同。所以问题是计算每个折叠的准确性,然后是 mean(),而另一个是混淆矩阵的总和,然后是准确性。
    猜你喜欢
    • 2017-12-17
    • 2017-09-22
    • 2017-12-25
    • 1970-01-01
    • 2021-10-12
    • 2020-09-23
    • 1970-01-01
    • 2017-03-03
    • 2019-05-14
    相关资源
    最近更新 更多