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

时间:2024-03-28 10:53:31

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

首先介绍将L0范数与L1范数相结合的SCAD方法。


SCAD(Smoothly Clipped Absolute Deviation)

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

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

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

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

β^SCAD={sign(βj^)|βj^|λ),0|βj|<2λ,((a1)βj^sign(βj^)aλ)/(a2),2λ|βj^|<aλ,βj^,|βj^|aλ.

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

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

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


SIS(Sure Independence Screening)

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

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

ω=XTY,

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

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

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

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

距离相关性(Distance Covariance)

aj,k=XjXk,j,k=1,2,,n,bj,k=YjYk,j,k=1,2,,n,

其中:||||表示Euclidean范数(欧几里得距离),有:
Aj,k:=aj,ka¯ja¯k+a¯,Bj,k:=bj,kb¯jb¯k+b¯,

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

(2)dCovn2(X,Y):=1n2j=1nk=1nAj,kBj,k.


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

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

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

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

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

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

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

Ik=GkGk1Gk2,

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

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

Iit=j=1MIj.

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

I(i)=1nt=1TIit.

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

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


原始对偶**集算法(PDAS)

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

其算法如下:

  1. 给定某固定的T,初始的β0d0=g(β0)h(β0),根据β0d0得出A0I0。令k=0
  2. For k=0,1,2,,Kmax, do
    (2.a) 更新(βk+1,dk+1):
    {βIkk+1=0dAkk+1=0βAkk+1=argminl(βAk|Y,XAk)dIkk+1=g(βIkk)h(βIkk)

    (2.b) 通过以下方式计算新的**集Ak+1和非**集Ik+1:
    Ak+1={j:h(βjk+1)|βjk+1+djk+1|h(βjk+1)βjk+1+djk+1T,},

    Ik+1=(Ak+1)c

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

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