应用统计II项目R语言随机森林代码报错:参数长度不一致求助
问题排查:随机森林混淆矩阵报错(all arguments must have the same length)
问题描述
我是一名R语言新手,正在完成应用统计II(Applied Stats II)项目。运行代码时反复出现以下错误:
[1] "Confusion Matrix: TRAINING set based on random forest model built using 2 trees"
Error in table(train.data$heart_data, train.data.predict): all arguments must have the same length
Traceback:
- table(train.data$heart_data, train.data.predict)
- stop("all arguments must have the same length")
运行代码
set.seed(6522048) library(randomForest) model_rf1 <- randomForest(target ~ age+sex+cp+trestbps+chol+restecg+exang+ca, data = train.data, ntree = 2) print("======================================================================================================================") print('Confusion Matrix: TRAINING set based on random forest model built using 2 trees') train.data.predict <- predict(model_rf1, train.data, type = "class") conf.matrix <- table(train.data$heart_data, train.data.predict)[,c('YES','NO')] rownames(conf.matrix) <- paste("Actual", rownames(conf.matrix), sep = ": ") colnames(conf.matrix) <- paste("Prediction", colnames(conf.matrix), sep = ": ") format(conf.matrix,justify="centre",digit=2) print("=====================================================================================================================") print('Confusion Matrix: TESTING set based on random forest model built using 2 trees') test.data.predict <- predict(model_rf1, test.data, type = "class") conf.matrix <- table(test.data$heart_data, test.data.predict)[,c('YES','NO')] (conf.matrix) <- paste("Actual", rownames(conf.matrix), sep = ": ") colnames(conf.matrix) <- paste("Prediction", colnames(conf.matrix), sep = ": ") format(conf.matrix,justify="centre",digit=2)
错误原因与修复方案
核心问题
- 因变量名称不匹配:模型训练时用的因变量是
target,但生成混淆矩阵时却调用了train.data$heart_data,二者要么不是同一变量,要么heart_data的长度和预测结果train.data.predict不匹配,导致table()函数报错。 - 语法错误:测试集部分的
(conf.matrix) <- paste(...)多了一对括号,会将字符串直接赋值给conf.matrix,破坏后续矩阵操作逻辑。
修复步骤
统一因变量名称
保持模型与混淆矩阵的因变量一致:- 如果模型中的因变量确实是
target,修改混淆矩阵的table行:# 训练集 conf.matrix <- table(train.data$target, train.data.predict)[,c('YES','NO')] # 测试集 conf.matrix <- table(test.data$target, test.data.predict)[,c('YES','NO')] - 如果你的因变量实际是
heart_data,则修改模型公式为heart_data ~ age+sex+cp+trestbps+chol+restecg+exang+ca。
- 如果模型中的因变量确实是
修复测试集语法错误
将测试集部分的(conf.matrix) <- paste(...)修正为rownames(conf.matrix) <- paste(...),与训练集逻辑保持一致:rownames(conf.matrix) <- paste("Actual", rownames(conf.matrix), sep = ": ")可选:提前验证长度匹配
可以在生成预测后添加验证代码,提前确认长度是否一致:# 训练集验证 cat("训练集实际值长度:", length(train.data$target), "\n") cat("训练集预测值长度:", length(train.data.predict), "\n") # 测试集验证 cat("测试集实际值长度:", length(test.data$target), "\n") cat("测试集预测值长度:", length(test.data.predict), "\n")
修复后的完整代码
set.seed(6522048) library(randomForest) # 注意:若因变量是heart_data,将此处的target替换为heart_data model_rf1 <- randomForest(target ~ age+sex+cp+trestbps+chol+restecg+exang+ca, data = train.data, ntree = 2) print("======================================================================================================================") print('Confusion Matrix: TRAINING set based on random forest model built using 2 trees') train.data.predict <- predict(model_rf1, train.data, type = "class") conf.matrix <- table(train.data$target, train.data.predict)[,c('YES','NO')] rownames(conf.matrix) <- paste("Actual", rownames(conf.matrix), sep = ": ") colnames(conf.matrix) <- paste("Prediction", colnames(conf.matrix), sep = ": ") # 打印格式化后的混淆矩阵 print(format(conf.matrix, justify="centre", digit=2)) print("=====================================================================================================================") print('Confusion Matrix: TESTING set based on random forest model built using 2 trees') test.data.predict <- predict(model_rf1, test.data, type = "class") conf.matrix <- table(test.data$target, test.data.predict)[,c('YES','NO')] rownames(conf.matrix) <- paste("Actual", rownames(conf.matrix), sep = ": ") colnames(conf.matrix) <- paste("Prediction", colnames(conf.matrix), sep = ": ") # 打印格式化后的混淆矩阵 print(format(conf.matrix, justify="centre", digit=2))
内容的提问来源于stack exchange,提问作者Jeff Routson
相关产品推荐
相关产品推荐

