如何显示每个交叉验证折叠的混淆矩阵和报告(召回率、精度、fmeasure)



我正在尝试在python中执行10倍交叉验证。我知道如何计算混淆矩阵和拆分测试的报告(例如拆分80%的训练和20%的测试(。但问题是,我不知道如何计算混淆矩阵,并为每个折叠报告——例如,当折叠10时,我只知道平均精度的代码。

这里是一个可重复的例子,使用癌症数据和3倍CV简化:

from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.model_selection import KFold
X, y = load_breast_cancer(return_X_y=True)
n_splits = 3
kf = KFold(n_splits=n_splits, shuffle=True)
model = DecisionTreeClassifier()
for train_index, val_index in kf.split(X):
model.fit(X[train_index], y[train_index])
pred = model.predict(X[val_index])
print(confusion_matrix(y[val_index], pred))
print(classification_report(y[val_index], pred))

结果得到3个混淆矩阵&分类报告,每个CV折叠一份:

[[ 63   9]
[ 10 108]]
precision    recall  f1-score   support
0       0.86      0.88      0.87        72
1       0.92      0.92      0.92       118
micro avg       0.90      0.90      0.90       190
macro avg       0.89      0.90      0.89       190
weighted avg       0.90      0.90      0.90       190
[[ 66   8]
[  6 110]]
precision    recall  f1-score   support
0       0.92      0.89      0.90        74
1       0.93      0.95      0.94       116
micro avg       0.93      0.93      0.93       190
macro avg       0.92      0.92      0.92       190
weighted avg       0.93      0.93      0.93       190
[[ 59   7]
[  8 115]]
precision    recall  f1-score   support
0       0.88      0.89      0.89        66
1       0.94      0.93      0.94       123
micro avg       0.92      0.92      0.92       189
macro avg       0.91      0.91      0.91       189
weighted avg       0.92      0.92      0.92       189

最新更新