R语言Random Forest模型生成混淆矩阵时遇类型错误求助
解决Random Forest混淆矩阵报错:Error in !all.equal(nrow(data), ncol(data)) : invalid argument type
错误原因
你的代码中目标变量price是数值型,randomForest默认会将其识别为回归任务,预测结果p1是连续数值。而confusionMatrix()是专门为分类任务设计的函数,无法处理回归场景下table(testData$price, testData$p1)生成的稀疏交叉表,因此抛出参数类型错误。
解决方案
根据你的实际任务类型选择对应方案:
方案1:如果是分类任务(price为离散类别)
先将price转换为因子类型,让randomForest执行分类任务:
# 先把price转为因子(确保是分类任务) completeData$price <- as.factor(completeData$price) ind <- sample(2, nrow(completeData), replace = TRUE, prob = c(0.7, 0.3)) trainData <- completeData[ind == 1, ] testData <- completeData[ind == 2, ] rf1 <- randomForest(price~., data = trainData) p1 <- predict(rf1, newdata = testData) # 生成混淆矩阵 confusionMatrix(table(testData$price, p1))
方案2:如果是回归任务(price为连续数值)
混淆矩阵不适用回归任务,改用回归评估指标:
# 加载Metrics包(如果没安装先执行install.packages("Metrics")) library(Metrics) # 计算回归评估指标 mae_value <- mae(testData$price, p1) # 平均绝对误差 rmse_value <- rmse(testData$price, p1) # 均方根误差 r_squared <- cor(testData$price, p1)^2 # 决定系数 cat("MAE:", mae_value, "\nRMSE:", rmse_value, "\nR²:", r_squared) # 也可以直接查看randomForest模型自带的OOB指标 print(rf1)
额外注意
如果你的price确实是分类变量但未转因子,randomForest会误判为回归任务,这是最常见的触发该错误的原因。确认数据类型是关键。
内容的提问来源于stack exchange,提问作者Doc.s
相关产品推荐
相关产品推荐

