RStudio中构建线性回归模型时lm函数无响应求助
解决R中线性回归模型无响应问题及构建Lasso回归方案
问题根源
- 你使用
~ .将所有变量纳入模型,其中同时保留了原始分类变量和生成的虚拟变量,导致严重多重共线性,且特征维度暴增。lm()需要计算大规模矩阵的逆运算,这会让R陷入长时间计算甚至无响应。 - 若数据集本身规模较大(行数/列数过多),普通线性回归的计算复杂度会急剧上升,进一步拖慢进程。
修复线性回归无响应问题
1. 清理冗余变量
先移除原始分类变量,避免多重共线性,只保留虚拟变量和数值型特征:
# 加载dplyr用于数据筛选(未安装则先运行install.packages("dplyr")) library(dplyr) # 移除原始分类变量,保留虚拟变量、SALE PRICE和数值特征 trainData_clean <- trainData %>% select(-BOROUGH, -`BUILDING CLASS CATEGORY`, -`TAX CLASS AT TIME OF SALE`)
2. 简化模型特征
如果清理后特征仍较多,先从核心特征开始建模,再逐步扩展:
# 用核心特征构建线性回归(比如面积+行政区虚拟变量) lm_model <- lm(`SALE PRICE` ~ `GROSS SQUARE FEET` + starts_with("DUMMY_BOROUGH"), data = trainData_clean) # 若确认特征无冗余,也可以用全量清理后的数据建模 # lm_model <- lm(`SALE PRICE` ~ ., data = trainData_clean)
3. 小规模测试验证
如果数据集行数过多,先取子集验证模型能否正常运行:
# 随机抽取1万条数据测试 set.seed(123) sample_train <- trainData_clean[sample(nrow(trainData_clean), 10000), ] lm_test <- lm(`SALE PRICE` ~ ., data = sample_train) # 若测试通过,再用全量数据;若仍慢,可改用fastlm包提升效率 # install.packages("fastlm") # library(fastlm) # lm_model <- fastlm(`SALE PRICE` ~ ., data = trainData_clean)
构建Lasso回归模型(适配高维度数据)
Lasso回归天生适合高维度场景,能自动进行特征选择,步骤如下:
1. 准备glmnet要求的矩阵格式
# 提取特征矩阵(自动处理虚拟变量,移除截距列) x <- model.matrix(`SALE PRICE` ~ ., data = trainData_clean)[, -1] # 提取目标变量 y <- trainData_clean$`SALE PRICE`
2. 交叉验证选择最优正则化参数
set.seed(123) # alpha=1代表Lasso回归,family="gaussian"对应回归任务 lasso_cv <- cv.glmnet(x, y, alpha = 1, family = "gaussian") # 查看最优lambda值(最小交叉验证误差对应的参数) lasso_cv$lambda.min
3. 训练最优Lasso模型
lasso_model <- glmnet(x, y, alpha = 1, lambda = lasso_cv$lambda.min) # 查看被选中的特征(系数非0的变量) print(coef(lasso_model))
4. 测试集评估
# 预处理测试集 testData_clean <- testData %>% select(-BOROUGH, -`BUILDING CLASS CATEGORY`, -`TAX CLASS AT TIME OF SALE`) x_test <- model.matrix(`SALE PRICE` ~ ., data = testData_clean)[, -1] # 预测并计算RMSE lasso_pred <- predict(lasso_model, newx = x_test) rmse_lasso <- sqrt(mean((lasso_pred - testData_clean$`SALE PRICE`)^2)) cat("Lasso回归测试集RMSE:", rmse_lasso, "\n")
内容的提问来源于stack exchange,提问作者Inokaj
相关产品推荐
相关产品推荐

