由于《An Introduction to Statistical Learning with R》书中的方法书中的方法都是一些比较基础的方法,在做模拟实验以及真实超高维数据时,会出现很多局限性。因此本文后半部分介绍了课本上未提及到的一些方法。这些方法会在后面的模拟实验以及真实数据中进行应用,并且比较书上传统的方法与下述三种方法的真实变量筛选效果。
首先介绍将范数与范数相结合的SCAD方法。
SCAD(Smoothly Clipped Absolute Deviation)
与岭回归相比,SCAD降低了模型的预测方差,与此同时与Lasso相比,SCAD又缩小了参数估计的偏差,同时它还有很多前面算法所不具备的优秀性质,因而受到了广泛的关注。
SCAD将前面博客提到的,变为如下形式:
其中,,Fan和Li\cite{article11} 建议a取3.7。特别地,若设计矩阵正交时,SCAD法参数估计显式表达式如下:
上图说明了惩罚,惩罚,与SCAD三者惩罚之间的差别。可以看出,方法只会进行变量筛选,不会进行压缩,(LASSO)既会进行变量筛选,也会对系数继续一定的调整。而SCAD可以从图中很明显的其结合了两种方法,对系数较大的变量不进行惩罚,对系数较少的进行压缩或者删去,因此这种方法既可以筛选变量,也有着Oracle的性质,使其预测效果和真实模型别无二致。
SCAD虽然有相应的迭代算法,但是由于其复杂度高,所以计算速度相对较慢。另外老师上课讲过的将与范数相结合的Elastic Net方法\cite{article16},也是基于前面的一种衍生方法,本文不再进行阐述。
SIS(Sure Independence Screening)
当今大数据时代,维数远大于样本量的情况已经非常多见。尽管前面所提出的方法,而且也能一定程度上解决髙维数据问题。但当遇到超高维数据,即维数P无穷大时,上述的算法也会出现问题。针对这类超高维问题,Fan和Lv\cite{article12} 提出了SIS的方法。
针对线性回归模型(2),按照SIS的思想,首先为中心化向量,计算与每一个自变量的相关系数,记为
其中 ,若越大,说明与相关性越强。所以,可以根据的大小来进行变量选择。对任意的,对进行从大到小排序,然后取其一个子集
其中,是样本数,是的整数部分,进而保证了,与之对应的自变量则入选模型。如果觉得选择不便于确定,可以选择或。
而关于相关系数,可以选用自己认为合适的。本文后面的模拟选用传统的Pearson相关系数,以及近几年比较火的可用于检验独立的无参数假设的距离相关性(Distance Covariance),下面其计算公式:
距离相关性(Distance Covariance)
其中:表示Euclidean范数(欧几里得距离),有:
其中: 表示由组成的矩阵,第行均值, 表示第列均值,以及是样本中所有数取平均。的符号标记同一样,则样本的距离相关性定义为:
利用随机森林进行变量筛选
其实使用随机森林进行变量筛选是一个比较小众的方法,但其实代表了一类方法。模型本身是用于预测的模型,但在预测过程中,可以对变量重要性进行排序,然后通过这种排序来进行变量筛选。这类方法其实还适用于最近比较火的xgboost,lightgbm等一些非常流行的基于树的机器学习算法,在实际应用中,效果都非常突出。
本文只以较为基础的随机森林中的变量筛选为例:
变量重要性评判用Gini指数为标准,针对一棵树中的每个节点,我们都可以计算一个Gini指数:
其中表示样本在节点属于任意一类的概率估计值。
一个节点的重要性由节点分裂前后Gini指数的变化量来确定:
和分别表示产生的子节点。针对森林中的每棵树,都用上述的标准来递归产生,最终随机抽取样本和变量,产生森林,假设森林共产生棵树。
森林中,如果变量在第棵树中出现次,则变量在第棵树的重要性为:
则在整个森林中的变量重要性为:
最终我们根据变量重要性来选择变量,选择的个数可以用SIS中的方法,选取或个。
至此,变量筛选的一些方法已进行了简要的概述,包括课本中的以及一些延伸的方法。下面将用模拟实验以及真实数据,来对这些方法进行比较分析。
原始对偶**集算法(PDAS)
原始对偶**集算法(Primal Dual Active Set,PDAS)是一个非常新的方法,但做的事情是最优子集选择的事情。其主要思想是引入**集,对所有的进行批量迭代更新。这个方法的优势在于,可以处理超高维数据(上万维),而最优子集选择一旦超过了50维,基本就完全没办法进行运算。后面我们也将采用PDAS来进行模拟。
其算法如下:
- 给定某固定的,初始的,,根据和得出、。令
- For , do
(2.a) 更新:
(2.b) 通过以下方式计算新的**集和非**集:
(2.c) 如果,则停止迭代;否则令,继续(2.a)和(2.b)步。
(2.d) 输出。
后面我们将对前面提及的一些算法进行simulation,以及真实案例操作,敬请期待。