逐步回归算法?

By 陆勤 at 2019-05-21 • 0人收藏 • 244人看过

逐步回归(或逐步选择)是在预测模型中迭代地添加和删除预测因子,以便在数据集中找到性能最好的模型的变量子集,即降低预测误差的模型。


逐步回归有三种策略:

1 前向选择,从模型中没有预测变量开始,迭代地添加最多的贡献预测变量,当改进不再具有统计显著性时停止。

2 向后选择(或向后消除),从模型中的所有预测变量(完整模型)开始,迭代地移除最少的贡献预测变量,并在所有预测变量具有统计显著性的模型时停止。

3 逐步选择(或顺序替换),它是前向和后向选择的组合。 您从没有预测变量开始,然后依次添加最有贡献的预测变量(如前向选择)。 添加每个新变量后,删除任何不再提供模型拟合改进的变量(如向后选择)。


注意:

  • 前向选择和逐步选择可以应用于高维数据集,其中样本的数量n少于预测因子的数量p,例如在基因组数据集。

  • 向后选择要求样本数n大于变量数p,以便可以拟合整个模型。


R语言实现逐步回归

# 加载R包
library(tidyverse)
library(caret)
library(leaps)
library(MASS)

# 加载数据集
data(swiss)
glimpse(swiss)

# 基于AIC指标的逐步回归
full.model <- lm(Fertility ~ ., data = swiss)
# 逐步回归模型
step.model <- stepAIC(
  full.model,
  direction = 'both',
  trace = FALSE
)
summary(step.model)

# 或者
models <- regsubsets(
  Fertility ~ .,
  data = swiss,
  nvmax = 5,
  method = 'seqrep'
)
summary(models)

# 可重复性试验
set.seed(123)
train.control <- trainControl(method = 'cv', number = 10)
step.model <- train(
  Fertility ~ .,
  data = swiss,
  method = 'leapBackward',
  tuneGrid = data.frame(nvmax = 1:5),
  trControl = train.control
)

step.model$results
step.model$bestTune
summary(step.model$finalModel)
coef(step.model$finalModel, 4)

lm(Fertility ~ Agriculture + Education + Catholic + Infant.Mortality, 
   data = swiss)

library(MASS)
res.lm <- lm(Fertility ~ ., data = swiss)
step <- stepAIC(res.lm, direction = 'both', trace = FALSE)
step

# 训练模型
step.model <- train(
  Fertility ~ .,
  data = swiss,
  method = 'lmStepAIC',
  trControl = train.control,
  trace = FALSE
)

# 模型的准确性
step.model$results
# 最终模型的系数
step.model$finalModel
# 模型的摘要
summary(step.model$finalModel)


参考资料:

http://www.sthda.com/english/articles/37-model-selection-essentials-in-r/154-stepwise-regression-essentials-in-r/



登录后方可回帖

信息栏
数据人网是数据人学习、交流和分享的平台,专注于从数据中学习,努力发觉数据之洞见,积极利用数据之价值
Loading...