美文网首页R. python新手日记特征变量选择程序员
R语言第六章机器学习①R中的逐步回归要点

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

作者: 柳叶刀与小鼠标 | 来源:发表于2018-12-18 12:17 被阅读233次

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

    逐步回归有三种策略:

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

    前向选择和逐步选择可以应用于高维配置,其中样本数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)。

    相关文章

      网友评论

        本文标题:R语言第六章机器学习①R中的逐步回归要点

        本文链接:https://www.haomeiwen.com/subject/rzvkkqtx.html