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

R语言随机森林模型混淆矩阵报错:data与reference因子水平不一致

葡萄酒质量随机森林预测混淆矩阵报错修复方案

问题根源

  1. 训练集拆分逻辑错误:红葡萄酒的训练集trainRed误用了白葡萄酒的拆分索引,导致训练集混入白葡萄酒数据,模型学习目标混乱。
  2. 任务类型错误:quality变量为数值型,randomForest默认执行回归任务,预测结果是连续数值,转成因子后每个数值都是独立水平,与测试集离散的质量等级(3-9)无法匹配,触发混淆矩阵报错。

修复后完整代码

# 加载所需包
library(tidyverse)
library(caret)
library(randomForest)

# 读取葡萄酒数据集
wines <- read_csv("wine-quality.csv")

# 重命名列
names(wines) <- c("type","fixed_acidity","volatile_acidity","citric_acid", "residual_sugar",
                  "chlorides","free_sulfur_dioxide","total_sulfur_dioxide","density","pH",
                  "sulphates", "alcohol","quality")

# 转换类型变量为因子,将质量变量转为分类因子(指定固定水平)
wines$type <- as.factor(wines$type)
wines$quality <- factor(wines$quality, levels = c(3,4,5,6,7,8,9))

# 拆分红、白葡萄酒数据
red <- wines[wines$type == "red",]
white <- wines[wines$type == "white",]

# 设置随机种子确保可复现
set.seed(123)

# 拆分红葡萄酒训练/测试集
trainIndex_red <- createDataPartition(red$quality, p = 0.8, list = FALSE)
trainRed <- red[trainIndex_red, ]
testRed <- red[-trainIndex_red, ]

# 拆分白葡萄酒训练/测试集
trainIndex_white <- createDataPartition(white$quality, p = 0.8, list = FALSE)
trainWhite <- white[trainIndex_white, ]
testWhite <- white[-trainIndex_white, ]

# 构建随机森林分类模型(因quality是因子,自动执行分类任务)
rfModelRed <- randomForest(quality ~ ., data = trainRed, ntree = 500)
rfModelWhite <- randomForest(quality ~ ., data = trainWhite, ntree = 500)

# 生成预测结果(自动为同水平的因子类型)
rfpredictionsred <- predict(rfModelRed, newdata = testRed)
rfpredictionswhite <- predict(rfModelWhite, newdata = testWhite)

# 计算RMSE(将因子转为数值适配计算)
rfRedrmse <- RMSE(as.numeric(rfpredictionsred), as.numeric(testRed$quality))
rfWhitermse <- RMSE(as.numeric(rfpredictionswhite), as.numeric(testWhite$quality))

# 生成混淆矩阵(因子水平完全匹配)
cmrfRed <- confusionMatrix(rfpredictionsred, testRed$quality)
accuraccyrfRed <- cmrfRed$overall['Accuracy']
cmrfWhite <- confusionMatrix(rfpredictionswhite, testWhite$quality)
accuraccyrfWhite <- cmrfWhite$overall['Accuracy']

# 查看结果
print(cmrfRed)
print(accuraccyrfRed)

关键修改说明

  • 修正训练集拆分:分别为红、白葡萄酒生成独立拆分索引,确保训练集仅包含对应类型数据。
  • 强制分类任务:将quality转为指定水平的因子,让randomForest自动执行分类,预测结果与测试集标签水平一致。
  • 清理冗余代码:删除原代码中未使用的red_wines/white_wines赋值语句,避免逻辑混乱。
  • 适配RMSE计算:将因子转换为数值后计算误差,适配分类任务的评估需求。

内容的提问来源于stack exchange,提问作者CocaCola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:49