变量选择回顾
更详细内容请见我的知乎回答 特征工程到底是什么?
符号说明:
特征数量
样本数量
变量选择在机器学习中扮演着重要的角色,无论是对于构建一个可解释的模型,还是提升模型的预测能力。
单变量筛选
在高维情况下,有时候我们需要预先筛选部分变量,然后再训练模型。筛选过程需要做到如下两点:
- 计算复杂度不能太高
- 不能丢掉真正起作用的变量
简言之,就是快而准。第二点也被称之为 Sure Screening Property,即在一些条件下满足:
其中,是真正起作用的变量集(理论上的),是筛选出来的变量集。最直接的筛选方式是计算每个特征和目标变量之间的相关性,并保留相关性高于某一阈值的特征。最常见的是皮尔森相关性,但它只能刻画两个变量之间的线性关系。如果特征变量和目标变量之间是二次相关,皮尔森相关性就难以胜任了。秩相关系数能够较好的刻画出单调的非线性关系。另外,还有基于互信息的变量筛选方式,这常出现在分类模型中。除此之外,还可以用单个特征来拟合目标变量,残差越小,则这个特征越重要。如果用线性模型来拟合,此时的维度为1,它和皮尔森相关系数是等价的;如果是用非参数模型,比如B样条,局部线性模型等,则能够较好刻画出单个特征和目标变量之间的非线性相关关系。但是计算量比之前的方法有所增加,且结果的好坏依赖于模型的选取(model dependent)。
需要注意,单变量筛选没有考虑到特征对目标变量的协同效应,即特征之间的交互作用,不宜将变量选得太少。
例如,下面的模型中, 和 的相关性为0.7, 和 的相关性为0.4, 和 独立。通过 构造一个变量 ,使得 和的相关性达到0.6。现在令, 如果通过上述单变量方法筛选2个变量,那么,被选中,不会被选中。然而,包含的关于的所有信息都在来自。换句话说,在考虑的条件下,对预测没有作用,才是那个应该被选中的变量。
通过模型选择变量
接下来,我们简单回顾下通过模型选择变量。最直观的方法是筛选最佳子集,但它是一个NP hard问题。如果有个特征,则需要考虑个模型。当较大时,无疑太过耗时。退而求其次,逐步回归在计算量上可以接受,但其贪心的性质决定了很难找出最佳模型。
AIC和BIC可以看做是加了惩罚项的极大似然。
LASSO对原始问题的回归系数加了惩罚。从优化角度讲,等价于原始最优化问题的可行域被限制在一个有尖点的凸集上,这样的最优解是稀疏的。且惩罚系数越大,解越稀疏。
但LASSO在理论上并不完美,对于真正起作用的变量,无法满足渐进无偏性,即估计值的绝对值偏小。后来,SCAD诞生了,其满足了稀疏性,无偏性和连续性,这三条性质也被称之为ORACLE性质,之后不少的变量选择方法都以满足ORACL性质为最优准则。
可以看到,较之于前面的单变量筛选方法,基于模型的变量选择同时考虑了所有变量,能有效刻画模型之间的交互作用。
变量选择进阶
只用模型就能选好变量么
如果用模型筛选的就能得到结果,计算速度可以接受,那还需要单变量筛选方式么?换句话说,单变量筛选存在的意义是什么?
为了回答这个问题,我使用sklearn中的diabetes数据集,比较通过下述方式建立的模型的预测能力。
数据处理
diabetes数据集有442个样本,特征变量记为, 目标变量记为,有10个特征。首先我们通过正态分布采集噪声数据,特征数量为。和组成新的特征变量,共个特征。
模型介绍
通过LASSO选择变量,惩罚项系数备选项:0.01, 0.05, 0.1, 0.5, 1, 5, 10, 100。根据5重交叉验证选择惩罚项系数,并测试模型的预测能力。噪声维度为: 10, 50, 100, 500, 1000, 2000。
模型一:直接采用LASSO训练模型。
模型二:用单变量方法,先筛选一半的变量,再用LASSO训练模型。
模型三:用单变量方法,先筛选20个变量,再用LASSO训练模型。
需要特别说明: 模型二和模型三实验中,不能先在整个数据集上用单变量方法筛选变量,再用交叉验证选取超参alpha,计算测试误差,这属于对交叉验证的误用。单变量筛选需要和选取超参同时出现在训练集,而不能出现在测试集。
实验结果
可以看到,当噪声维度比较小时,先筛选一半变量或20个变量再训练LASSO模型,显著优于直接用LASSO训练模型。当噪声维度较大时,先筛选20个变量再训练LASSO模型,显著优于另外两种方法。这充分说明预先筛选变量再训练模型的重要性。然而,这并不是这样做的唯一原因,下面通另一个角度——伪相关,再次认识预筛选变量。
认识伪相关
在一般情况下(),通过模型选择变量就足够了。但在超高维情况下,会出现伪相关问题,导致选入额外的变量,模型过拟合,并低估方差。
我们先直观认识一下伪相关。假定相互独立,且服从标准正态分布。
- 和是的一个样本实现,样本数量。
- 计算的每一列与的相关系数并取绝对值,记录个绝对相关系数的最大值。
重复这个过程100次,绘制最大值的密度函数。下图展示了密度函数曲线与的关系。
可以看到随着的增加,最大相关系数的密度函数明显右移,变得越来越大,但是它们其实都是从独立的变量中进行采样的。在超高维情况下(),这种现象尤其明显。这会导致选入无关变量,模型过拟合,且低估模型的方差。模型的方差在构建置信区间时尤为重要,较小的方差会导致过于乐观的置信区间。Fan, Guo等提出了两步法来解决超高维情况下的方差估计。我根据自己的理解,结合变量选择和方差估计,改述如下:
两步法估计
将均匀的划分为两部分, 和 。
step 1:通过单变量筛选,在上筛选出变量子集,在上筛选出变量子集。
step 2:在上用LASSO等再次拟合模型,记筛选后的变量为, 估计的方差为。在上用LASSO等再次拟合模型,记筛选后的变量为, 估计的方差为。
则最后筛选的变量集合为: ,方差估计为:.
实现方法很简单,但却非常有用。第一步中可能选入伪相关的变量,第二步使用第一步筛选出来的变量在新的数据集上拟合模型,能够大概率排除伪相关的变量。从而更准确的选择出重要的变量,并估计模型的方差。
附录:
代码及结果 github:J11235
参考资料:
- Jianqing Fan and Jinchi Lv(208) Sure independence screening for ultrahigh dimensional feature space
- Jianqing Fan and Jinchi Lv(2010) A Selective Overview of Variable Selection in High Dimensional Feature Space
- LIU JingYuan, ZHONG Wei and LI RunZe(2015) A selective overview of feature screening for ultrahigh-dimensional data