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

如何使用LOOCV构建交叉验证图?GLM函数报‘family未识别’错误

解决GLM的'family'未识别错误及LOOCV交叉验证图构建

错误根源

你写的glm(data_set, tree)参数顺序完全错误,且缺少必填的family参数。GLM的标准语法是:

glm(formula, data, family = ...)
  • 第一个参数必须是公式对象(比如你这里的tree),第二个才是数据集data_set
  • family必须明确指定:线性回归用gaussian(),逻辑回归用binomial(),泊松回归用poisson(),这是GLM运行的核心参数(哪怕是默认线性回归,也建议显式声明)

正确的LOOCV实现

要做留一交叉验证(LOOCV),不能直接调用glm,得用boot包的cv.glm函数,它才会返回包含delta的交叉验证结果:

# 先安装并加载boot包(未安装则先执行install.packages("boot"))
library(boot)

# 第一步:正确构建GLM模型(以线性回归为例,根据你的数据替换family)
glm_model <- glm(tree, data = data_set, family = gaussian())

# 第二步:执行LOOCV(K设为数据集行数即为留一验证,也可省略K,cv.glm会自动识别)
loocv_result <- cv.glm(data = data_set, glmfit = glm_model, K = nrow(data_set))

# 提取LOOCV的原始预测误差(delta[1]为原始误差,delta[2]为调整后误差)
loocv_error <- loocv_result$delta[1]

构建交叉验证图

如果要绘制不同模型复杂度下的LOOCV误差曲线(比如多项式回归阶数与误差的关系),可以通过循环遍历模型参数,计算对应LOOCV误差后绘图:

# 示例:多项式回归的LOOCV误差曲线(替换自变量列名为你的实际变量名)
degree_range <- 1:5
loocv_errors <- c()

for(d in degree_range){
  # 构建d阶多项式模型
  model_formula <- as.formula(paste("tree ~ poly(自变量列名,", d, ")"))
  glm_model <- glm(model_formula, data = data_set, family = gaussian())
  # 计算LOOCV误差
  cv_result <- cv.glm(data_set, glm_model)
  loocv_errors <- c(loocv_errors, cv_result$delta[1])
}

# 绘制交叉验证图
plot(degree_range, loocv_errors, type = "b", 
     xlab = "多项式阶数", ylab = "LOOCV预测误差", 
     main = "LOOCV交叉验证误差曲线")

关键注意事项

  • 严格遵循glm的参数顺序:公式在前,数据集在后
  • 根据数据类型选择正确的family,这是解决报错的核心
  • LOOCV必须通过cv.glm实现,直接调用glm不会执行交叉验证逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:40:50