特征选择的目的主要有两个:首先,我们在现实任务中经常会遇到维数灾难问题,这是由于属性过多而造成的,若能从中选择出重要的特征,使得后续学习过程仅需在-部分特征上构建模型,则维数灾难问题会大为减轻。这与降维的目的类似。第一个原因是,去除不相关特征往往会降低学习任务的难度,这就像侦探破案一样,若将纷繁复杂的因素抽丝剥茧,只留下关键因素,则真相往往更易看清。
1. 子集搜素与评价
在众多的特征中如何找到一个包含了所有重要信息的特征子集。如果采用枚举的方式,一旦特征过多,显然是不可行的。所以一般是先产生一个候选特征子集,然后根据评价产生下一个子集。
基于上面的思路,“子集搜索”一共有三中方案:前向搜索、后向搜索和双向搜索。
前向搜索:
1.选择一个最优的特征作为初始子集;
2.给候选子集新增一个特征,加入的特征组合是最优的组合且比原来候选子集最优。则将该特征加入到候选特征子集中。
3.直到下一轮添加特征后不如上一轮最优,则停止迭代。
后向搜索:
1.将所有特征作为初始子集;
2.给候选子集去掉一个特征,去掉后的特征组合是最优的组合且比原来候选子集最优。则将该特征从候选特征子去除。
3.直到下一轮去除特征后不如上一轮最优,则停止迭代。
双向搜索:
结合前向和后向搜索,每次迭代都增加相关特征,减少无关特征。
子集评价可以使用信息增益来进行计算。对于不同的属性A,根据其取值将数据集D分成v类,于是就可以计算A的信息增益:
G
a
i
n
(
A
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
Gain(A) = Ent(D) -\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v)
Gain(A)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
常见的特征选择方法大致可分为三类:过滤式(且lter) 、包裹式(wrapper)和嵌入式(embedding)。
2. 过滤式选择
Relief(Relevant Features)是一种著名的过滤式特征选择方法,该方法设计了一个"相关统计量"来度量特征的重要性。该统计量是一个向量,其每个分量分别对应于一个初始特征,而特征子集的重要性则是由子集中每个特征所对应的相关统计量分量之和来决定。于是,最终只需指定一个阔值T没,然后选择比T 大的相关统计量分量所对应的特征即可;也可指定欲选取的特征个数k,然后选择相关统计量分量最大的k个特征。
对于训练集中的每一个样本
x
i
x_i
xi先在其同类样本中寻找最近邻
x
i
,
n
h
x_{i,nh}
xi,nh,称为“猜中近邻”(near hit);在其异类样本中寻找最近邻
x
i
,
n
m
x_{i,nm}
xi,nm,称为“猜错近邻”(near miss)。相关统计量对应与属性j的分量为:
δ
j
=
∑
i
−
d
i
f
f
(
x
i
j
,
x
i
,
n
h
j
)
2
+
d
i
f
f
(
x
i
j
,
x
i
,
n
m
j
)
2
\delta^j = \sum_{i}-diff(x_i^j,x_{i,nh}^j)^2+diff(x_i^j,x_{i,nm}^j)^2
δj=i∑−diff(xij,xi,nhj)2+diff(xij,xi,nmj)2
若样本为离散型: d i f f ( x a j , x b j ) diff(x_a^j,x_b^j) diff(xaj,xbj)为0和1
若样本为连续型: d i f f ( x a j , x b j ) = ∣ x a j − x b j ∣ diff(x_a^j,x_b^j) = |x_a^j-x_b^j| diff(xaj,xbj)=∣xaj−xbj∣
从上式可看出,若 x i x_i xi与其猜中近邻在属性j上的距离小于其与其猜错近邻的距离,则说明属性j对区分同类与异类样本是有益的,于是增大属性j 所对应的统计量分量;反之,若 x i x_i xi与其猜中近邻在属性j上的距离大于其与其猜错近邻的距离,则说明属性j 起负面作用,于是减小属性j 所对应的统计量分量.最后,对基于不同样本得到的估计结果进行平均,就得到各属性的相关统计量分量,分量值越大,则对应属性的分类能力就越强。
这里的更新的思想很像在聚类一章中所提到的学习向量化算法中的迭代思想:若最近的原型向量p与样本的类别标记相同,则令p向样本的方向靠拢;若最近的原型向量p与样本的类别标记不相同,则令p向样本的方向远离。
Relief的效率很高,因为它是在样本上进行采样,而不是在整个样本上估计统计相关量。且针对于二分类问题,对多分类问题,主要可以使用其变体Relief-F,其不同在于需要从每种不同标记的样本中寻找猜错近邻,并且将各个类别样本中得到的猜错近邻估计进行加权平均,其权值就是其类别所对应的样本数在数据集中所占的比例:
δ
j
=
∑
i
−
d
i
f
f
(
x
i
j
,
x
i
,
n
h
j
)
2
+
∑
l
≠
k
(
p
l
×
d
i
f
f
(
x
i
j
,
x
i
,
l
,
n
m
j
)
2
)
\delta^j = \sum_{i}-diff(x_i^j,x_{i,nh}^j)^2+\sum_{l \neq k}(p_l \times diff(x_i^j, x_{i,l,nm}^j)^2)
δj=i∑−diff(xij,xi,nhj)2+l̸=k∑(pl×diff(xij,xi,l,nmj)2)
其中
p
l
p_l
pl是l类样本在数据集D中所占的比例。
3. 包裹式选择 - LVW(Las Vegas Wrapper)
与过滤式特征选择不考虑后续学习器不同,包裹式特征选择直接把最终将要使用的学习器的性能作为特征于集的评价准则。换言之,包裹式特征选择的目的就是为给定学习器选择最有利于其性能、"量身走做"的特征子集。
LVM,拉斯维加斯方法是一个典型的包裹式的特征选择方法,其主要思路是:
1.随机产生一组特征子集;
2.如果该特征子集的误差比上一轮迭代的特征子集的误差更小,或误差相当;并且包含的特征数更少,则此次的特征子集保留下来;
3.重复1,2步,直到满足迭代次数。
其算法描述如下:
这个算法随机性太高,而且不像遗传算法或者梯度下降,每次都会往更好的方向前进,纯随机的方法导致该算法可能很长时间都达不到停止条件,如果有时间限制的话,很可能给不出解。
4. 嵌入式选择与L1正则化
嵌入式特征选择是将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成,即在学习器训练过程中自动地进行了特征选择。
在很多模型中,我们都会用到最小化均方误差作为我们的优化目标:
min
w
∑
i
=
1
m
(
y
i
−
w
T
x
i
)
2
\min_{w}\ \sum_{i=1}^{m}(y_i-w^Tx_i)^2
wmin i=1∑m(yi−wTxi)2
样本数过少的时候,为了避免过拟合,我们引入了正则化项,比如我们常使用L2范数正则化:
min
w
∑
i
=
1
m
(
y
i
−
w
T
x
i
)
2
+
λ
∣
∣
w
∣
∣
2
\min_{w}\ \sum_{i=1}^{m}(y_i-w^Tx_i)^2+\lambda ||w||^2
wmin i=1∑m(yi−wTxi)2+λ∣∣w∣∣2
当然,除了L2范数,我们依然可以引入LP范数,如果我们引入L1范数,就得到了LASSO(Least Absolute Shrinkage and Selection Operator)最小绝对收缩选择算子。
L1范数和L2范数正则化都有助于降低过拟合风险,但前者还会带来一个额外的好处:它比后者更易于获得"稀疏" (sparse)解,即它求得的ω会有更少的非零分量。
从图中可以看出:
L1范数等值线与平方误差项等值线往往相交于某个坐标轴上,这样对应与w1,w2就表示有一个为0;
L2范数等值线与平方误差项等值线往往相交于某个象限中,这就表示w1与w2的值均不为0;
通过这个例子很好解释了L1为什么比L2更容易获得稀疏解。
那么在最终的模型中,我们取非零w所对应的特征,就是我们算法所选择的特征,所以,基于L1范数正则化的方法就是一种嵌入式的特征选择方法,在模型训练过程中进行特征选择。
5. 稀疏表示与字典学习
为普通稠密表达的样本找到合适的字典,将样本转化为合适的稀疏表示形式,从而使学习任务得以简化,模型复杂度得以降低,通常称为"字典学习" (dictionary learning) ,亦称"稀疏编码" (sparse coding)。这两个称谓稍有差别,"字典学习"更侧重于学得字典的过程,而"稀疏编码"则更侧重于对样本进行稀疏表达的过程由于两者通常是在同一个优化求解过程中完成的,因此笼统地称为字典学习。
给定数据集D,字典学习最简单的形式为:
min
B
,
α
i
=
∑
i
=
1
m
∣
∣
x
i
−
B
α
i
∣
∣
2
2
+
λ
∑
i
=
1
m
∣
∣
α
i
∣
∣
1
\min_{B,\alpha_i} = \sum_{i=1}^{m}||x_i-B\alpha_i||_2^2+\lambda\sum_{i=1}^{m}||\alpha_i||_1
B,αimin=i=1∑m∣∣xi−Bαi∣∣22+λi=1∑m∣∣αi∣∣1
其中:
B
∈
R
d
×
k
B ∈ R^{d \times k}
B∈Rd×k为字典矩阵,k称为字典的词汇量,通常由用户指定,
α
i
∈
R
k
\alpha_i ∈ R^k
αi∈Rk,是样本
x
i
∈
R
d
x_i∈ R^d
xi∈Rd的稀疏表示。上式的第一项是希望由
α
i
\alpha_i
αi能很好地重构
x
i
x_i
xi,第二项则是希望
α
i
\alpha_i
αi尽量稀疏。
对于求解主要分为两步进行迭代更细:
第一步:固定字典B,为每个样本找到相应的
α
i
\alpha_i
αi:
min
α
i
∣
∣
x
i
−
B
α
i
∣
∣
2
2
+
λ
∣
∣
α
i
∣
∣
1
\min_{\alpha_i} \ ||x_i-B\alpha_i||_2^2+\lambda||\alpha_i||_1
αimin ∣∣xi−Bαi∣∣22+λ∣∣αi∣∣1
第二步:固定
α
i
\alpha_i
αi来更新字典B:
min
B
∣
∣
X
−
B
A
∣
∣
F
2
\min_{B}||X-BA||_F^2
Bmin∣∣X−BA∣∣F2
其求解方法常用的有基于逐列更新策略KSVD。
关于这部分,书上讲的也不是特别详细,待以后研究后再做补充。
6. 压缩感知
压缩感知这块内容非常复杂,书上所给的内容不足以支撑理解,这里放几个链接,供各位研究:
形象易懂讲解算法
初识压缩感知Compressive Sensing
压缩感知(Compressive Sensing)学习之(一)
压缩感知(Compressive Sensing)学习之(二)