使用confusionMatrix函数报错:数据含未找到的水平,求解决方法
解决confusionMatrix报错:The data contain levels not found in the data
错误原因
confusionMatrix要求真实标签(reference)和预测标签(data)的因子水平必须完全一致。你的场景中:
as.factor(AAA)生成的因子包含E水平BBB的因子水平固定为["A","B","C","D","L"],无E
两者水平不匹配,触发报错。
解决方法
方法1:统一所有可能的水平(推荐,保留全部类别信息)
先合并真实标签和预测标签的所有水平,再将两者转为包含统一水平的因子:
# 提取所有需要覆盖的水平 all_levels <- unique(c(AAA, levels(BBB))) # 将真实标签和预测标签转为统一水平的因子 ref_factor <- factor(AAA, levels = all_levels) pred_factor <- factor(BBB, levels = all_levels) # 重新调用confusionMatrix confusionMatrix(reference = ref_factor, data = pred_factor, mode='everything')
方法2:仅保留预测标签的水平(过滤/转换真实标签)
如果AAA中的E是无效类别,或你只需要分析BBB包含的水平:
- 方式A:将真实标签转为和预测标签一致的水平(
E会被设为NA,需确认是否接受)
ref_factor <- factor(AAA, levels = levels(BBB)) confusionMatrix(reference = ref_factor, data = BBB, mode='everything')
- 方式B:直接过滤掉真实标签中含
E的样本(同步过滤预测标签)
# 筛选出AAA属于BBB水平的样本索引 valid_samples <- AAA %in% levels(BBB) # 仅用有效样本计算混淆矩阵 confusionMatrix(reference = factor(AAA[valid_samples]), data = BBB[valid_samples], mode='everything')
内容的提问来源于stack exchange,提问作者Ester Silva
相关产品推荐
相关产品推荐

