岭回归cv.glmnet样本量不匹配报错解决及数据集大小疑问
岭回归报错问题解决与疑问解答
1. 报错问题解决
你的报错根源是**cv.glmnet的参数传入逻辑错误**:
x需要传入训练集的特征矩阵(不含目标变量),y需要传入训练集对应的目标变量,你错误地将整个测试集作为y传入,导致x的样本数(94)和y的样本数(10)不匹配。
修正步骤如下:
第一步:拆分特征与目标变量
假设数据框最后一列是目标变量(若不是,替换为你的目标列名即可),拆分训练集和测试集的特征与目标:
# 拆分训练集:特征矩阵X_train + 目标变量y_train X_train <- read_training[, -ncol(read_training)] y_train <- read_training[, ncol(read_training)] # 拆分测试集:特征矩阵X_test + 目标变量y_test X_test <- read_test[, -ncol(read_test)] y_test <- read_test[, ncol(read_test)]
第二步:正确运行岭回归
用拆分后的训练集特征和目标变量传入cv.glmnet:
ridge <- cv.glmnet(x = X_train, y = y_train, type.measure = "mse", alpha = 0, family = "gaussian", nlambda = 200)
第三步:测试集预测(可选)
训练完成后,用模型对测试集进行预测并评估:
# 预测测试集结果 y_pred <- predict(ridge, newx = X_test) # 计算测试集均方误差 test_mse <- mean((y_pred - y_test)^2)
2. 训练集与测试集是否必须大小一致?
不需要,而且通常训练集的样本量要远大于测试集,比如你当前用的9:1拆分比例(94个训练样本、10个测试样本)是合理的。
报错的根本原因不是训练集和测试集大小不一致,而是你错误地将测试集作为目标变量传入模型,导致样本数不匹配。
内容的提问来源于stack exchange,提问作者Someone_1313
相关产品推荐
相关产品推荐

