在R中如何降低多元线性回归的RMSE?求优化步骤及算法建议
降低RMSE的步骤与可选预测模型
一、降低RMSE的优先级步骤
- 数据基础校验
- 排查异常值:用
boxplot(Annual_salary)或可视化工具检查年薪及预测变量的极端值,判断是否为错误数据,考虑剔除或做对数/平方根变换(若年薪分布严重偏态)。 - 核对因子转换:用
str()查看数据结构,确认所有分类变量已正确转为因子,无遗漏类别、无连续变量误转情况。 - 特征衍生:从现有18个变量中挖掘新特征,比如组合相关分类变量(如部门+职级)、对连续变量做多项式变换(如年龄的平方项),补充潜在的非线性关系。
- 排查异常值:用
- 优化模型验证逻辑
- 采用交叉验证:因仅84行数据,用10折交叉验证替代单一训练测试拆分,用
caret包的trainControl(method = "cv", number = 10)实现,避免过拟合导致的RMSE偏差。 - 重新评估特征筛选:olsrr的最优子集在小样本下易过拟合,改用逐步回归(
step(lm_model, direction = "both"))对比特征选择结果,优先保留统计显著的变量。
- 采用交叉验证:因仅84行数据,用10折交叉验证替代单一训练测试拆分,用
- 模型细节调优
- 给MLR加入交互项:检验显著变量间的交互效应(如
var1 * var2),用anova()验证交互项是否能提升模型解释力。 - 修正lasso/ridge实现:必须先对特征做标准化(
scale()),用glmnet包的cv.glmnet(x, y, alpha = 1)(lasso)或alpha = 0(ridge)选择最优lambda参数,再基于该参数生成预测,避免因未标准化导致模型失效。
- 给MLR加入交互项:检验显著变量间的交互效应(如
二、可选预测模型(适配小样本场景)
- 决策树/随机森林:用
rpart(决策树)或randomForest包,随机森林可自动处理非线性关系,输出变量重要性,小样本下需控制树的数量和深度避免过拟合。 - 支持向量回归(SVR):
e1071包的svm()函数,尝试线性或径向基核函数,调整惩罚参数适配小样本数据。 - K近邻回归(KNN):通过
caret包实现,需先标准化特征,适合特征间相关性较强的场景。 - 梯度提升树(GBM):
gbm包,小样本下需限制迭代次数和树的深度,避免过度拟合。
三、MLR RMSE最低的验证要点
- 确保RMSE是在验证集/交叉验证上计算的,而非训练集——训练集RMSE低可能是过拟合导致的虚假结果。
- 统一计算逻辑:用
sqrt(mean((预测值 - 实际值)^2))分别计算MLR、lasso、ridge的验证集RMSE,保证对比的公平性。
内容的提问来源于stack exchange,提问作者Sharan Shetty
相关产品推荐
相关产品推荐

