首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言第六章机器学习①R中的逐步回归要点

R语言第六章机器学习①R中的逐步回归要点

作者头像
用户1359560
发布2018-12-27 17:10:27
3.3K0
发布2018-12-27 17:10:27
举报
文章被收录于专栏:生信小驿站生信小驿站

逐步回归(或逐步选择)包括在预测模型中迭代地添加和移除预测变量,以便找到数据集中的变量子集,从而产生性能最佳的模型,即降低预测误差的模型。

逐步回归有三种策略:

  • 前向选择从模型中没有预测变量开始,迭代地添加最多的贡献预测变量,并在改进不再具有统计显着性时停止。
  • 向后选择(或向​​后消除),从模型中的所有预测变量(完整模型)开始,迭代地移除最少的贡献预测变量,并在您拥有所有预测变量具有统计显着性的模型时停止。
  • 逐步选择(或顺序替换),这是前向和后向选择的组合。从没有预测变量开始,然后依次添加最有贡献的预测变量(如前向选择)。添加每个新变量后,删除任何不再提供模型拟合改进的变量(如向后选择)。 注意,

前向选择和逐步选择可以应用于高维配置,其中样本数n不如预测变量p的数量,例如在基因组数据中。 向后选择要求样本数n大于变量数p,以便可以拟合整个模型。

计算逐步回归

有许多函数和R包用于计算逐步回归。 这些包括:stepAIC()[MASS包],由AIC选择最佳型号。 它有一个名为direction的选项,它可以采用以下值:i)“both”(对于逐步回归,前向和后向选择); “向后”(用于向后选择)和“向前”(用于向前选择)。 它返回最好的最终模型。

library(MASS)
# Fit the full model 
full.model <- lm(Fertility ~., data = swiss)
# Stepwise regression model
step.model <- stepAIC(full.model, direction = "both", 
                      trace = FALSE)
summary(step.model)

regsubsets()[leaps package],其调整参数nvmax指定要包含在模型中的最大预测变量数。 它返回多个不同大小的模型,最高可达nvmax。 您需要比较不同模型的性能以选择最佳模型。 regsubsets()有选项方法,它可以取值“向后”,“向前”和“seqrep”(前向和后向选择的组合)。

models <- regsubsets(Fertility~., data = swiss, nvmax = 5,
                     method = "seqrep")
summary(models)

请注意,train()函数[caret包]提供了一个简单的工作流程,可以使用跳跃和MASS包执行逐步选择。它有一个名为method的选项,它可以采用以下值:

“leapBackward”,适合线性回归和后向选择
“leapForward”,适合线性回归和前向选择
“leapSeq”,以逐步选择拟合线性回归。

还需要指定调整参数nvmax,它对应于要包含在模型中的最大预测变量数。

以下示例使用swiss数据集执行向后选择(method =“leapBackward”),以根据社会经济指标确定用于预测生育率的最佳模型。由于数据集仅包含5个预测变量,因此我们将nvmax从1变为5,从而识别出具有不同大小的5个最佳模型:最佳1变量模型,最佳2变量模型,...,最佳5 变量模型。

我们将使用10倍交叉验证来估计5个模型中每个模型的平均预测误差(RMSE)(参见章节@ref(交叉验证))。 RMSE统计度量用于比较5个模型并自动选择最佳模型,其中最佳定义为最小化RMSE的模型。

# Set seed for reproducibility
set.seed(123)
# Set up repeated k-fold cross-validation
train.control <- trainControl(method = "cv", number = 10)
# Train the model
step.model <- train(Fertility ~., data = swiss,
                    method = "leapBackward", 
                    tuneGrid = data.frame(nvmax = 1:5),
                    trControl = train.control
                    )
step.model$results

上面的输出显示了不同的指标及其标准偏差,用于比较5种最佳模型的准确性。

  • nvmax:模型中变量的数量。 例如,nvmax = 2,指定最佳的2变量模型
  • RMSE和MAE是衡量每个模型的预测误差的两个不同指标。 RMSE和MAE越低,模型越好。
  • Rsquared表示观察到的结果值与模型预测的值之间的相关性。 R平方越高,模型越好。

在我们的例子中,可以看出具有4个变量(nvmax = 4)的模型是具有最低RM的模型

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

lm(Fertility ~ Agriculture + Education + Catholic + Infant.Mortality, 
   data = swiss)
## 
## Call:
## lm(formula = Fertility ~ Agriculture + Education + Catholic + 
##     Infant.Mortality, data = swiss)
## 
## Coefficients:
##      (Intercept)       Agriculture         Education          Catholic  
##           62.101            -0.155            -0.980             0.125  
## Infant.Mortality  
##            1.078

讨论

另一种选择是MASS包中提供的函数stepAIC()。 它有一个名为direction的选项,它可以有以下值:“both”,“forward”,“backward”。

library(MASS)
res.lm <- lm(Fertility ~., data = swiss)
step <- stepAIC(res.lm, direction = "both", trace = FALSE)
step
# Train the model
step.model <- train(Fertility ~., data = swiss,
                    method = "lmStepAIC", 
                    trControl = train.control,
                    trace = FALSE
                    )
# Model accuracy
step.model$results
# Final model coefficients
step.model$finalModel
# Summary of the model
summary(step.model$finalModel)

逐步回归对包含多个预测变量的高维数据非常有用。 其他替代方案是惩罚回归(ridge和lasso回归)和基于主成分的回归方法(PCR和PLS)。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.12.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 逐步回归有三种策略:
  • 计算逐步回归
  • 讨论
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档