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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:54:00