变量选择回顾
更详细内容请见我的知乎回答 特征工程到底是什么?
符号说明:
p
:
p:
p: 特征数量
n
:
n:
n: 样本数量
变量选择在机器学习中扮演着重要的角色,无论是对于构建一个可解释的模型,还是提升模型的预测能力。
单变量筛选
在高维情况下,有时候我们需要预先筛选部分变量,然后再训练模型。筛选过程需要做到如下两点:
- 计算复杂度不能太高
- 不能丢掉真正起作用的变量
简言之,就是快而准。第二点也被称之为 Sure Screening Property,即在一些条件下满足:
P
(
M
⋆
⊂
M
v
n
^
)
→
1
P(M_\star \subset \hat{M_{v_n}}) \rightarrow 1
P(M⋆⊂Mvn^)→1
其中, M ⋆ M_\star M⋆是真正起作用的变量集(理论上的), M v n ^ \hat{M_{v_n}} Mvn^是筛选出来的变量集。最直接的筛选方式是计算每个特征和目标变量之间的相关性,并保留相关性高于某一阈值的特征。最常见的是皮尔森相关性,但它只能刻画两个变量之间的线性关系。如果特征变量和目标变量之间是二次相关,皮尔森相关性就难以胜任了。秩相关系数能够较好的刻画出单调的非线性关系。另外,还有基于互信息的变量筛选方式,这常出现在分类模型中。除此之外,还可以用单个特征来拟合目标变量,残差越小,则这个特征越重要。如果用线性模型来拟合,此时 X X X的维度为1,它和皮尔森相关系数是等价的;如果是用非参数模型,比如B样条,局部线性模型等,则能够较好刻画出单个特征和目标变量之间的非线性相关关系。但是计算量比之前的方法有所增加,且结果的好坏依赖于模型的选取(model dependent)。
需要注意,单变量筛选没有考虑到特征对目标变量的协同效应,即特征之间的交互作用,不宜将变量选得太少。
例如,下面的模型中, y y y 和 x 1 x_1 x1 的相关性为0.7, y y y 和 x 2 x_2 x2 的相关性为0.4, x 1 x_1 x1 和 x 2 x_2 x2 独立。通过 x 1 x_1 x1 构造一个变量 x 3 x_3 x3,使得 x 3 x_3 x3 和 y y y的相关性达到0.6。现在令 X = ( x 1 , x 2 , x 3 ) X=(x_1, x_2, x_3) X=(x1,x2,x3), 如果通过上述单变量方法筛选2个变量,那么 x 1 x_1 x1, x 3 x_3 x3被选中, x 2 x_2 x2不会被选中。然而, x 3 x_3 x3包含的关于 y y y的所有信息都在来自 x 1 x_1 x1。换句话说,在考虑 x 1 x_1 x1的条件下, x 3 x_3 x3对预测 y y y没有作用, x 2 x_2 x2才是那个应该被选中的变量。
y = x 1 + x 2 + ϵ y = x_1 + x_2 + \epsilon y=x1+x2+ϵ
通过模型选择变量
接下来,我们简单回顾下通过模型选择变量。最直观的方法是筛选最佳子集,但它是一个NP hard问题。如果 X X X有 p p p个特征,则需要考虑 2 p 2^p 2p个模型。当 p p p较大时,无疑太过耗时。退而求其次,逐步回归在计算量上可以接受,但其贪心的性质决定了很难找出最佳模型。
AIC和BIC可以看做是加了惩罚项的极大似然。
LASSO对原始问题的回归系数加了 L 1 L_1 L1惩罚。从优化角度讲,等价于原始最优化问题的可行域被限制在一个有尖点的凸集上,这样的最优解是稀疏的。且惩罚系数越大,解越稀疏。
但LASSO在理论上并不完美,对于真正起作用的变量,无法满足渐进无偏性,即估计值的绝对值偏小。后来,SCAD诞生了,其满足了稀疏性,无偏性和连续性,这三条性质也被称之为ORACLE性质,之后不少的变量选择方法都以满足ORACL性质为最优准则。
可以看到,较之于前面的单变量筛选方法,基于模型的变量选择同时考虑了所有变量,能有效刻画模型之间的交互作用。
变量选择进阶
只用模型就能选好变量么
如果用模型筛选的就能得到结果,计算速度可以接受,那还需要单变量筛选方式么?换句话说,单变量筛选存在的意义是什么?
为了回答这个问题,我使用sklearn中的diabetes数据集,比较通过下述方式建立的模型的预测能力。
数据处理
diabetes数据集有442个样本,特征变量记为 X 1 X_1 X1, 目标变量记为 Y Y Y, X 1 X_1 X1有10个特征。首先我们通过正态分布采集噪声数据 X 2 X_2 X2,特征数量为 p p p。 X 1 X_1 X1和 X 2 X_2 X2组成新的特征变量 X X X,共 10 + p 10+p 10+p个特征。
模型介绍
通过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模型,显著优于另外两种方法。这充分说明预先筛选变量再训练模型的重要性。然而,这并不是这样做的唯一原因,下面通另一个角度——伪相关,再次认识预筛选变量。
认识伪相关
在一般情况下( n > p n>p n>p),通过模型选择变量就足够了。但在超高维情况下,会出现伪相关问题,导致选入额外的变量,模型过拟合,并低估方差。
我们先直观认识一下伪相关。假定 y , x 1 , ⋯   , x p y, x_1, \cdots, x_p y,x1,⋯,xp相互独立,且服从标准正态分布。
- Y Y Y和 X X X是 y , x 1 , ⋯   , x p y, x_1, \cdots, x_p y,x1,⋯,xp的一个样本实现,样本数量 n = 100 n=100 n=100。
- 计算 X X X的每一列与 Y Y Y的相关系数并取绝对值,记录 p p p个绝对相关系数的最大值。
重复这个过程100次,绘制最大值的密度函数。下图展示了密度函数曲线与
p
p
p的关系。
可以看到随着
p
p
p的增加,最大相关系数的密度函数明显右移,变得越来越大,但是它们其实都是从独立的变量中进行采样的。在超高维情况下(
p
>
>
n
p>>n
p>>n),这种现象尤其明显。这会导致选入无关变量,模型过拟合,且低估模型的方差。模型的方差在构建置信区间时尤为重要,较小的方差会导致过于乐观的置信区间。Fan, Guo等提出了两步法来解决超高维情况下的方差估计。我根据自己的理解,结合变量选择和方差估计,改述如下:
两步法估计
将 X , Y X, Y X,Y均匀的划分为两部分, X 1 , Y 1 X^1, Y^1 X1,Y1 和 X 2 , Y 2 X^2, Y^2 X2,Y2。
step 1:通过单变量筛选,在 X 1 , Y 1 X^1, Y^1 X1,Y1上筛选出变量子集 M 1 ^ \hat{M_1} M1^,在 X 2 , Y 2 X^2, Y^2 X2,Y2上筛选出变量子集 M 2 ^ \hat{M_2} M2^。
step 2:在 X M 2 ^ 1 , Y 1 X^1_{\hat{M_2}}, Y^1 XM2^1,Y1上用LASSO等再次拟合模型,记筛选后的变量为 M 3 ^ \hat{M_3} M3^, 估计的方差为 σ ^ 1 2 \hat{\sigma}^2_1 σ^12。在 X M 1 ^ 2 , Y 2 X^2_{\hat{M_1}}, Y^2 XM1^2,Y2上用LASSO等再次拟合模型,记筛选后的变量为 M 4 ^ \hat{M_4} M4^, 估计的方差为 σ ^ 2 2 \hat{\sigma}^2_2 σ^22。
则最后筛选的变量集合为: M ^ = M 3 ^ ⋂ M 4 ^ \hat{M} = \hat{M_3} \bigcap \hat{M_4} M^=M3^⋂M4^,方差估计为: σ ^ R C V 2 = ( σ ^ 1 2 + σ ^ 2 2 ) / 2 \hat{\sigma}_{RCV}^2=(\hat{\sigma}_1^2+\hat{\sigma}_2^2)/2 σ^RCV2=(σ^12+σ^22)/2.
实现方法很简单,但却非常有用。第一步中可能选入伪相关的变量,第二步使用第一步筛选出来的变量在新的数据集上拟合模型,能够大概率排除伪相关的变量。从而更准确的选择出重要的变量,并估计模型的方差。
附录:
代码及结果 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