一些变量筛选方法——3、部分其它变量筛选方法

由于《An Introduction to Statistical Learning with R》书中的方法书中的方法都是一些比较基础的方法,在做模拟实验以及真实超高维数据时,会出现很多局限性。因此本文后半部分介绍了课本上未提及到的一些方法。这些方法会在后面的模拟实验以及真实数据中进行应用,并且比较书上传统的方法与下述三种方法的真实变量筛选效果。

首先介绍将 L 0 范数与 L 1 范数相结合的SCAD方法。


SCAD(Smoothly Clipped Absolute Deviation)

与岭回归相比,SCAD降低了模型的预测方差,与此同时与Lasso相比,SCAD又缩小了参数估计的偏差,同时它还有很多前面算法所不具备的优秀性质,因而受到了广泛的关注。

SCAD将前面博客提到的 g λ ( β ) = λ f ( β ) ,变为如下形式:

g λ ( β ) = { λ | β j | , 0 | β j | < λ , ( | β j | 2 2 a λ | β j | + λ 2 ) / ( 2 a 2 ) , λ | β j | < a λ , ( a + 1 ) λ 2 / 2 , | β j | a λ .

其中, λ 0 , a > 2 ,Fan和Li\cite{article11} 建议a取3.7。特别地,若设计矩阵 X 正交时,SCAD法参数估计显式表达式如下:

β ^ S C A D = { s i g n ( β j ^ ) | β j ^ | λ ) , 0 | β j | < 2 λ , ( ( a 1 ) β j ^ s i g n ( β j ^ ) a λ ) / ( a 2 ) , 2 λ | β j ^ | < a λ , β j ^ , | β j ^ | a λ .

这里写图片描述

上图说明了 L 0 惩罚, L 1 惩罚,与SCAD三者惩罚之间的差别。可以看出, L 0 方法只会进行变量筛选,不会进行压缩, L 1 (LASSO)既会进行变量筛选,也会对系数继续一定的调整。而SCAD可以从图中很明显的其结合了两种方法,对系数较大的变量不进行惩罚,对系数较少的进行压缩或者删去,因此这种方法既可以筛选变量,也有着Oracle的性质,使其预测效果和真实模型别无二致。

SCAD虽然有相应的迭代算法,但是由于其复杂度高,所以计算速度相对较慢。另外老师上课讲过的将 L 1 L 2 范数相结合的Elastic Net方法\cite{article16},也是基于前面的一种衍生方法,本文不再进行阐述。


SIS(Sure Independence Screening)

当今大数据时代,维数远大于样本量的情况已经非常多见。尽管前面所提出的方法,而且也能一定程度上解决髙维数据问题。但当遇到超高维数据,即维数P无穷大时,上述的算法也会出现问题。针对这类超高维问题,Fan和Lv\cite{article12} 提出了SIS的方法。

针对线性回归模型(2),按照SIS的思想,首先 Y 为中心化向量,计算 Y 与每一个自变量 x i 的相关系数,记为

ω = X T Y ,

其中 ω = ( ω 1 , , ω p ) T ,若 ω i 越大,说明 x i Y 相关性越强。所以,可以根据 | ω i | 的大小来进行变量选择。对任意的 γ ( 0 , 1 ) ,对 | ω i | 进行从大到小排序,然后取其一个子集

M γ = { 1 i p : | ω i | 是前 [ γ n ] 个最大的 } ,

其中, n 是样本数, [ γ n ] γ n 的整数部分,进而保证了 [ γ n ] < n ,与之对应的自变量则入选模型。如果觉得选择 [ γ n ] 不便于确定,可以选择 n 1 n / log n

而关于相关系数,可以选用自己认为合适的。本文后面的模拟选用传统的Pearson相关系数,以及近几年比较火的可用于检验独立的无参数假设的距离相关性(Distance Covariance),下面其计算公式:

距离相关性(Distance Covariance)

a j , k = X j X k , j , k = 1 , 2 , , n , b j , k = Y j Y k , j , k = 1 , 2 , , n ,

其中: | | | | 表示Euclidean范数(欧几里得距离),有:
A j , k := a j , k a ¯ j a ¯ k + a ¯ , B j , k := b j , k b ¯ j b ¯ k + b ¯ ,

其中: a ¯ j 表示由 a j , k 组成的矩阵,第 j 行均值, a ¯ k 表示第 k 列均值,以及 a ¯ X 样本中所有数取平均。 b 的符号标记同 a 一样,则样本的距离相关性定义为:

(2) dCov n 2 ( X , Y ) := 1 n 2 j = 1 n k = 1 n A j , k B j , k .


利用随机森林进行变量筛选

其实使用随机森林进行变量筛选是一个比较小众的方法,但其实代表了一类方法。模型本身是用于预测的模型,但在预测过程中,可以对变量重要性进行排序,然后通过这种排序来进行变量筛选。这类方法其实还适用于最近比较火的xgboost,lightgbm等一些非常流行的基于树的机器学习算法,在实际应用中,效果都非常突出。

本文只以较为基础的随机森林中的变量筛选为例:

变量重要性评判用Gini指数为标准,针对一棵树中的每个节点 k ,我们都可以计算一个Gini指数:

G k = 2 p ^ k ( 1 p ^ k ) ,

其中 p ^ k 表示样本在节点 k 属于任意一类的概率估计值。

一个节点的重要性由节点分裂前后Gini指数的变化量来确定:

I k = G k G k 1 G k 2 ,

G k 1 G k 2 分别表示 G k 产生的子节点。针对森林中的每棵树,都用上述的标准来递归产生,最终随机抽取样本和变量,产生森林,假设森林共产生 T 棵树。

森林中,如果变量 X i 在第 t 棵树中出现 M 次,则变量 X i 在第 t 棵树的重要性为:

I i t = j = 1 M I j .

X i 在整个森林中的变量重要性为:

I ( i ) = 1 n t = 1 T I i t .

最终我们根据变量重要性来选择变量,选择的个数可以用SIS中的方法,选取 n 1 n / log n 个。

至此,变量筛选的一些方法已进行了简要的概述,包括课本中的以及一些延伸的方法。下面将用模拟实验以及真实数据,来对这些方法进行比较分析。


原始对偶激活集算法(PDAS)

原始对偶激活集算法(Primal Dual Active Set,PDAS)是一个非常新的方法,但做的事情是最优子集选择的事情。其主要思想是引入激活集,对所有的 β 进行批量迭代更新。这个方法的优势在于,可以处理超高维数据(上万维),而最优子集选择一旦超过了50维,基本就完全没办法进行运算。后面我们也将采用PDAS来进行模拟。

其算法如下:

  1. 给定某固定的 T ,初始的 β 0 d 0 = g ( β 0 ) h ( β 0 ) ,根据 β 0 d 0 得出 A 0 I 0 。令 k = 0
  2. For k = 0 , 1 , 2 , , K m a x , do
    (2.a) 更新 ( β k + 1 , d k + 1 ) :
    { β I k k + 1 = 0 d A k k + 1 = 0 β A k k + 1 = a r g m i n l ( β A k | Y , X A k ) d I k k + 1 = g ( β I k k ) h ( β I k k )

    (2.b) 通过以下方式计算新的激活集 A k + 1 和非激活集 I k + 1 :
    A k + 1 = { j : h ( β j k + 1 ) | β j k + 1 + d j k + 1 | h ( β j k + 1 ) β j k + 1 + d j k + 1 T , } ,

    I k + 1 = ( A k + 1 ) c

    (2.c) 如果 A k + 1 = A k ,则停止迭代;否则令 k = k + 1 ,继续(2.a)和(2.b)步。
    (2.d) 输出 β = β k + 1

后面我们将对前面提及的一些算法进行simulation,以及真实案例操作,敬请期待。

猜你喜欢

转载自blog.csdn.net/weixin_41929524/article/details/80358790
今日推荐