特征选择顾名思义就是从众多特征中选出和目标相关的特征,它是机器学习中很重要的一个环节。

 

子集选择与评价

从众多特征中选出部分特征构成特征的一个子集,就叫子集选择,

子集特征是否能很好地表征目标,需要对子集特征进行评价。

子集选择可以有前向搜索、后向搜索和双向搜索三种方式。

前向搜索

假定给定特征集{a1,a2,a3...ad}

第一轮,把每个特征看做一个子集,对每个子集进行评价,选出最优子集,假定为{a2}

第二轮,把{a2}作为基础子集,每次加入一个特征,然后进行评价,选出最优的二元子集,假定为{a2,a4}

重复上步骤

如果在某轮中,逐次添加完特征,评价结果都低于上一轮的结果,则结束,以上轮特征为最终结果。

后向搜索

与前向搜索类似,起初是全部特征作为一个集合,每轮减少一个特征。

双向搜索

相当于是两个线程,一个线程前向搜索,一个线程后向搜索,两个线程之间互相通信,在后向搜索中被删除的不会用于前向搜索,在前向搜索中被添加的不会用于后向搜索

 

这是一种贪心搜索,不一定全局最优,比如某轮特征子集为{a2,a4},然后添加a5比a6效果好,于是新的子集{a2,a4,a5},但是在下一轮中,有可能{a2,a4,a5}与其他特征的组合效果都不如{a2,a4,a6,a9},

可以借助ε-贪心策略进行缓解。

 

子集评价

总体思路:假定离散属性的分类问题,根据特征子集对样本进行划分,看划分的结果与真实标签的一致性,准确率越高,子集选择的效果越好。

在这种思路下衍生了很多方法:

信息熵与信息增益:同决策树里的概念,根据属性子集划分样本,计算分裂前与分裂后的信息熵,相减得到信息增益,增益越大,效果越好。

 

事实上,决策树也可以用于特征选择,建树时所有分裂特征就是特征子集,而且树模型都可以进行特征选择

 

常见的特征选择方法可以分为三大类:过滤式(filter),包裹式(wrapper),嵌入式(embedding)

过滤式选择

先进行特征选择,再训练学习器 

Relief 是一种著名的过滤式选择方法,它用一个“相关统计量”来度量特征的重要性,该统计量是一个向量,向量中每个元素对应一个特征,特征子集的重要性由子集中特征对应的统计量之和来决定。

在特征选择时,可以设置阈值,也可以设定特征个数,取topk

 

具体做法

给定数据集,对每个样本xi在同类样本中找最近邻xi,nh,称为“猜中近邻”,在异类样本中找最近邻xi,nm,称为“猜错近邻”,

然后计算每个属性j的统计量

diff是一种度量,如距离

若j为离散属性,则 两样本j属性相等时,diff=0,不相等时,diff=1

若j为连续属性,则 diff=|x1-x2|,注意属性需要规范到[0,1]之间。

若xi与其猜中近邻xi,nh在属性j上的差小于xi与其猜错近邻xi,nm在属性j上的差,说明属性j在类别区分时是有益的,故增大该属性的统计量,

若xi与其猜中近邻xi,nh在属性j上的差大于xi与其猜错近邻xi,nm在属性j上的差,说明属性j在类别区分时有负作用,故减小该属性的统计量。

 

迭代所有样本,所有特征,就能算出这个统计量。可以看出计算量很大,在实际应用中,可以通过采样来近似这个统计量

 

Relief是为二分类设计的,其扩展体 Relief-F可以实现多分类。

思路与二分类相似,二分类只找一个异类,多分类则是找到所有异类的“猜错近邻”

pl是每个类别的占比

 

方差选择法

from sklearn.feature_selection import VarianceThreshold
vt = VarianceThreshold(threshold = 1)
vt = vt.fit_transform(data)

 

包裹式选择

随机选择特征子集,用最终要使用的学习器的性能作为评价准则,也就是说子集是为学习器量身定制的。

所以通常包裹式选择最终模型的性能高于过滤式选择,但是由于要多次训练学习器,开销远大于过滤式选择。

 

LVW (Las Vegas Wrapper)是一种典型的包裹式选择方法,它在拉斯维加斯方法框架下采样随机策略选择子集,并用学习器的性能作为评价标准

具体做法

解释

1. E 错误率,初始无穷大,找最小

2. d 特征个数

3. A*最终的子集

4. t 迭代次数,初始为0

8. 基于子集A'的数据集进行交叉验证,得到模型误差

9. 如果误差小于当前误差,或者误差相等,但是特征个数小于当前特征个数,替换当前值

 

由于是随机生成子集,所以可能有无穷多个子集,而且每次需要训练学习器,开销很大,所以在有限时间内可能无法得到最终子集。

 

嵌入式选择

特征选择与训练学习器同时进行,当模型训练好后,特征选择也完成了。

它其实是基于模型参数的特征选择。

如线性回归 y=w1x1+w2x2+w3x3,x的系数代表了特征的重要性。

当然可以加入正则项,使得参数更平缓,L1和L2都可以。

但是L1更好,因为L1更容易使得参数更稀疏,即更容易得到0参数,用过正则的话很容易理解

可以看到 L1曲线更容易和损失函数相交于坐标轴上,此时参数为0

 

基于上述理论,形成了很多融合特征选择方法,具体参考 ‘参考资料3’

 

 

参考资料:

周志华《机器学习》

https://blog.csdn.net/chocolate_chuqi/article/details/81284702

https://blog.csdn.net/a1368783069/article/details/52048349  融合方法