如何用caret包的confusionMatrix处理已计算的4类别混淆矩阵?
解决方法:从预构建的混淆矩阵生成统计量
不用发愁!caret包的confusionMatrix()其实完全支持直接使用已有的混淆矩阵(不需要原始的真实/预测标签列表),只要我们把数据整理成正确的格式就行。下面是一步步的操作:
第一步:把数据框转为矩阵并指定类别名称
首先,我们需要将读取到的数据框转换成矩阵,并且给行和列添加上类别名称(行对应真实类别,列对应预测类别):
# 加载caret包(如果还没安装先运行 install.packages("caret")) library(caret) # 将数据框转为矩阵 conf_mat_matrix <- as.matrix(cm) # 给矩阵的行和列指定类别名称 rownames(conf_mat_matrix) <- colnames(conf_mat_matrix) <- c("C1", "C2", "C3", "C4")
第二步:转换为table对象并生成混淆矩阵统计量
confusionMatrix()接受table类型的输入,我们把矩阵转成table后直接传入即可:
# 转为table对象 conf_mat_table <- as.table(conf_mat_matrix) # 生成混淆矩阵分析结果 cm_results <- confusionMatrix(conf_mat_table)
第三步:提取你需要的统计量
现在你可以直接查看所有结果,或者提取byClass部分获取每个类别的灵敏度、特异性、F1值等:
# 查看完整的混淆矩阵报告 print(cm_results) # 只提取每个类别的关键统计量(灵敏度、特异性、F1等) cm_results$byClass
关键说明
- 一定要确保矩阵的行是真实类别,列是预测类别,这是
confusionMatrix()的默认逻辑,否则统计量会出错。 byClass输出里的每个行对应一个类别,包含的指标包括:Sensitivity:灵敏度(召回率)Specificity:特异性F1:F1值Precision:精确率- 还有其他如
Balanced Accuracy等实用指标
举个验证例子:C1的灵敏度应该是830/(830+0+10+0) = 0.9881,你可以对比cm_results$byClass["C1", "Sensitivity"]的结果,完全一致。
内容的提问来源于stack exchange,提问作者Catalin Stoean
相关产品推荐
相关产品推荐

