使用cross_validate生成混淆矩阵

我正在尝试弄清楚如何使用cross_validate生成混淆矩阵。目前我已经可以打印出分数了。

# 实例化模型
model = DecisionTreeClassifier()
# 分数
scoring = {'accuracy' : make_scorer(accuracy_score),
           'precision' : make_scorer(precision_score),
           'recall' : make_scorer(recall_score),
           'f1_score' : make_scorer(f1_score)}
# 10折交叉验证
scores = cross_validate(model, X, y, cv=10, scoring=scoring)
print("准确率(测试):%0.2f (+/- %0.2f)" % (scores['test_accuracy'].mean(), scores['test_accuracy'].std() * 2))
print("精确率(测试):%0.2f (+/- %0.2f)" % (scores['test_precision'].mean(), scores['test_precision'].std() * 2))
print("召回率(测试):%0.2f (+/- %0.2f)" % (scores['test_recall'].mean(), scores['test_recall'].std() * 2))
print("F1分数(测试):%0.2f (+/- %0.2f)" % (scores['test_f1_score'].mean(), scores['test_f1_score'].std() * 2))

但是我想将这些数据放入混淆矩阵中。我能够使用cross_val_predict来创建一个混淆矩阵 –

y_train_pred = cross_val_predict(model, X, y, cv=10)
confusion_matrix(y, y_train_pred)

这很好,但由于它执行了自己的交叉验证,结果不会匹配。我只是在寻找一种能够同时生成两者并且结果匹配的方法。


回答:

简短的回答是你不能

混淆矩阵的概念是使用一个训练好的模型来评估一组数据。结果是一个矩阵,而不是像准确率这样的分数。因此,你不能计算平均值或类似的东西。cross_val_score顾名思义,仅适用于分数。混淆矩阵不是分数,它是一种评估过程中发生情况的总结。

cross_val_predict与你所寻找的非常相似。这个函数会将数据分成K部分。每一部分将使用由其他部分数据得到的模型进行测试。所有测试样本将被合并。但要注意这个函数;根据文档(强调部分):

将这些预测输入到评估指标中可能不是衡量泛化性能的有效方法。除非所有测试集大小相等且指标可以分解到样本上,否则结果可能与cross_validate和cross_val_score不同。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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