R语言Iris数据集常规验证计算MSE报错如何修正
错误原因
- 核心错误1:
lm()是线性回归函数,要求响应变量为数值型,你选择了鸢尾花数据集的Species列作为响应变量,该列是因子类型(代表三类花的分类标签),无法直接用于回归计算,所以触发了「因子做响应变量、减法无意义」的警告。 - 核心错误2:代码存在多处语法逻辑错误:
- 回归公式左侧误写整个数据集
iris,而非具体的数值型响应变量 poly()内直接对4个特征求和,不符合多元多项式的构造规则- 计算MSE时使用不存在的
df对象、用整个数据集和预测值做运算
- 回归公式左侧误写整个数据集
修正方案
如果你的需求是做回归任务计算MSE,首先选定一个数值型特征作为预测目标,下面以预测Petal.Width为例给出可直接运行的修正代码:
# 加载包(如果后续要用到分类/自助法可以保留,纯回归场景可删除) library("class") library("boot") data(iris) # 划分训练集测试集,固定随机种子保证结果可复现 set.seed(123) train = sample(1:nrow(iris), 75) test_data = iris[-train,] # 1. 线性回归 MSE 计算 lm.fit = lm(Petal.Width ~ Sepal.Length + Sepal.Width + Petal.Length, data=iris, subset=train) pred_lm = predict(lm.fit, newdata = test_data) mse_lm = mean((test_data$Petal.Width - pred_lm)^2) cat("线性回归测试集MSE:", mse_lm, "\n") # 2. 二次回归 MSE 计算 # raw=T指定生成原始多项式而非正交多项式,可根据需求调整 lm.fit2 = lm(Petal.Width ~ poly(Sepal.Length, 2, raw = T) + poly(Sepal.Width, 2, raw = T) + poly(Petal.Length, 2, raw = T), data=iris, subset=train) pred_lm2 = predict(lm.fit2, newdata = test_data) mse_lm2 = mean((test_data$Petal.Width - pred_lm2)^2) cat("二次回归测试集MSE:", mse_lm2, "\n") # 3. 三次回归 MSE 计算 lm.fit3 = lm(Petal.Width ~ poly(Sepal.Length, 3, raw = T) + poly(Sepal.Width, 3, raw = T) + poly(Petal.Length, 3, raw = T), data=iris, subset=train) pred_lm3 = predict(lm.fit3, newdata = test_data) mse_lm3 = mean((test_data$Petal.Width - pred_lm3)^2) cat("三次回归测试集MSE:", mse_lm3, "\n")
如果你原本的需求是对Species做分类预测,需要更换为分类模型(如
glm()做多分类逻辑回归、knn()做K近邻分类),评估指标更换为分类准确率,而非回归场景的MSE。
内容的提问来源于stack exchange,提问作者Samh200
相关产品推荐
相关产品推荐

