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

R中使用自定义交叉验证训练glmnet时遇错误求助

解决Lasso模型训练中的警告与拟合失败问题

问题分析

你遇到的两个核心问题:

  1. "Setting row names on a tibble is deprecated"警告:因为train函数处理tibble格式数据时,尝试设置行名的操作已被tibble包弃用。
  2. glmnet拟合失败:常见诱因包括目标变量格式错误、数据含缺失值、变量共线性极强、lambda序列不合理等。你的y_train维度为(6048,1),说明目标变量是单列data.frame而非向量,这是触发拟合失败的潜在原因之一。

解决方案

1. 消除行名设置警告

将输入的预测变量数据从tibble转换为普通data.frame或矩阵,规避tibble行名操作的兼容性问题:

Train_x <- as.data.frame(Train[, predictorsNames])

2. 修正目标变量格式

确保目标变量是因子向量而非单列data.frame,glmnet要求y输入为向量格式:

Train_y <- Train[[outcomeName]]  # 也可使用 dplyr::pull(Train, bcpm07c)

3. 排查数据异常

  • 检查缺失值:缺失值会直接导致glmnet拟合失败,统计各列缺失情况:
    colSums(is.na(Train))
    
    处理方式:删除含缺失的行(Train <- na.omit(Train))或填充缺失值(如用中位数填充:Train <- mutate_all(Train, ~ifelse(is.na(.), median(., na.rm=T), .)))。
  • 检查共线性:高度相关的变量会干扰正则化过程,计算变量相关系数:
    corr_matrix <- cor(Train[, predictorsNames])
    # 筛选相关系数绝对值>0.9的变量对
    high_corr_pairs <- which(abs(corr_matrix) > 0.9 & row(corr_matrix) != col(corr_matrix))
    
    处理方式:移除其中一个共线性强的变量。

4. 优化模型参数设置

  • 手动指定lambda范围:默认lambda序列可能包含极端值,手动设置合理范围提升拟合稳定性:
    tuneGrid <- expand.grid(alpha = 1, lambda = seq(0.001, 0.1, by = 0.001))
    
  • 添加标准化预处理:显式设置变量中心化和标准化,确保变量尺度一致:
    preProcess = c("center", "scale")
    

修改后的完整代码

new_df$bcpm07c <- as.factor(new_df$bcpm07c )

outcomeName <- "bcpm07c"
predictorsNames <- names(new_df)[names(new_df)!= outcomeName]

# 调整数据格式,适配glmnet要求
Train_x <- as.data.frame(Train[, predictorsNames])
Train_y <- Train[[outcomeName]]

ctrl <- trainControl(method="repeatedcv", number = 10, repeats = 3 )

# 带优化设置的模型训练
fit.lass <- train(Train_x, Train_y, 
                  family= "binomial", 
                  alpha = 1, 
                  method='glmnet', 
                  trControl=ctrl,
                  preProcess = c("center", "scale"),
                  tuneGrid = expand.grid(alpha = 1, lambda = seq(0.001, 0.1, by=0.001)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:50:28