You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:46:29