使用caret包训练Elastic Net模型时出现“未定义列选择”错误
Caret包拟合Elastic Net时出现“undefined columns selected”错误的解决
我尝试在一个包含28个变量、1675条数据的数据集上拟合Elastic Net回归模型,使用caret包进行alpha和lambda的参数调优。交叉验证完成并选出最优参数后,在全量训练集上拟合时抛出了undefined columns selected错误,最初误以为是模型未收敛,后来排查出了问题根源。
出错代码
trc = trainControl(method = "repeatedcv", number = 5, repeats = 10, search = "random", verboseIter = TRUE) elastic = train([to be predicted] ~ ., data = [log transformed data], method = "glmnet", tuneLength = 10, trControl = trc)
错误输出
Aggregating results Selecting tuning parameters Fitting alpha = 0.432, lambda = 2.78 on full training set Error in `[.data.frame`(data, , all.vars(Terms), drop = FALSE) : undefined columns selected
解决方法
错误源于公式的写法问题:
最初我将待预测变量写成了data$price ~ .(例如指定数据集为data时,在公式里用data$price作为因变量),这种写法会导致caret无法正确识别数据集中的列名。
只需将公式修改为price ~ .(直接使用变量名,不带数据集前缀),模型就能正常完成全量数据的拟合,输出预期的Elastic Net模型结果。
内容的提问来源于stack exchange,提问作者Caden
相关产品推荐
相关产品推荐

