线性回归模型比较常见的特征选择方法有两种,分别是最优子集和逐步回归。此外还有正则化,降维等方法。

 

1,最优子集(Best Subset Selection):从零号模型(null model)M0开始,这个模型只有截距项而没有任何自变量。然后用不同的特征组合进行拟合,从中分别挑选出一个最好的模型(RSS最小或R2最大),也就是包含1个特征的模型M1,包含2个特征的模型M2,直至包含p个特征的模型Mp。然后从这总共p+1个模型中选出其中最好的模型(根据交叉验证误差,Cp,BIC或adjusted R2)(注:为什么不能用RSS或R2来衡量?因为增加任何特征,模型的训练RSS只会变小,R2只会增大)。这个最好模型所配置的特征就是筛选出的特征。

 

优点:因为遍历了所有可能的特征组合,因此筛选出的特征必定是最优的。

缺点:总共要拟合2p个模型,计算量非常大。

 

2,逐步回归(Stepwise Selection)

从计算的角度来讲,最优子集法只适用于最多30~40个特征,从统计学的角度来看,如果特征很多,最优子集法很容易产生过拟合的问题(一般来说,当p<10时可以用最优子集法)。因此在特征较多的情况下,适用逐步回归法来进行特征选择。

 

a. 前进法(Forward Selection):从零号模型(null model)M0开始,这个模型只有截距项而没有任何自变量。然后一个个地加入p个特征,保留RSS最小或R2最大的那个特征,此时这个模型记为M1。然后再在这个模型的基础上一个个地加入剩余的p-1个特征,仍然保留RSS最小或R2最大的那个特征(模型M2)。这样重复操作,直至包含p个特征的模型Mp。然后从这总共p+1个模型中选出其中最好的模型(根据交叉验证误差,Cp,BIC或adjusted R2)。这个最好模型所配置的特征就是筛选出的特征。

(注:计算量大约是p2

Python最优子集法确定回归分析自变量 spss寻找最优子集_过拟合

 

b. 后退法(Backward Selection): 从包含全部p个特征的模型Mp开始,然后一个个地移除p个特征,保留RSS最小或R2最大的那个模型,现在是包含p-1个特征的模型,称为模型Mp-1,继续移除剩余的p-1个特征。这样重复操作,直至包含0个特征的模型M0。然后从这总共p+1个模型中选出其中最好的模型(根据交叉验证误差,Cp,BIC或adjusted R2)。这个最好模型所配置的特征就是筛选出的特征。

(注:计算量大约是p2

(注:后退法不能用于p>n的情况)

Python最优子集法确定回归分析自变量 spss寻找最优子集_拟合_02

 

c. 混合法(Mixed Selection):从零号模型(null model)M0开始,这个模型只有截距项而没有任何自变量。和前进法一样加入特征,区别在于当某个特征的p值大于某个阈值时,移除该特征。重复这样的操作,直至模型中所有的特征都有足够低的p值,并且如果其余的特征加入其中会有超过某个阈值的p值。

 

前进法和后退法都属于贪心算法,能够局部达到最优,但是从全局来看不一定是最优的。前进法虽然每一次都能选取最显著的一个自变量,但在实际情况下,很可能有的自变量在开始时是显著的,但是在其余自变量添加进去之后,它就变得不显著了,而前进法却没有提供“剔除”该变量的选项。而后退法则很有可能会遗漏一些很重要的变量,虽然刚开始它可能并不显著。但是混合法会选入本身对模型目标没有多少贡献的特征,容易导致过拟合。这几种方法在特征有共线性问题的时候会出问题。因此,我还是倾向于自己手动进行选择,而不是完全依靠机器选择。