参考文章:https://www.cnblogs.com/pinard/p/9032759.html 和西瓜书
特征选择是数据预处理的一种,主要有三种方式:过滤式选择,包裹式选择和嵌入式选择。
过滤式选择,顾名思义,就是过滤掉不需要的特征或者说选择更有用的特征。那么如何判断特征是否有用,是否需要呢?这个标准其实有很多,我们下面列举几个:
求解某一特征和标签的相关系数 ρ x , y \rho_{x,y} ρx,y,明显,相关系数越大,越能说明该特征的作用越大,所以特性选择相关系数大的。
卡方检验的根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题,我们可以用卡方检验来对变量进行相关性分析。卡方检验的原理可以参考 https://blog.csdn.net/snowdroptulip/article/details/78770088 。
特征选择也可以使用方差,一般特征方差小的可以考虑删去,考虑极端情况,方差为0,那该特征基本对输出没什么作用,可以过滤掉。
互信息就是在决策树中的信息增益,互信息越大说明特征和输出之间相关性越大。
最后一个在西瓜书中提及到的Relief,相关统计量越大,特征和输出的相关性越大,第 j j 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^j_{i,nh})^2+diff(x_i^j,x^j_{i,nm})^2. δj=i∑−diff(xij,xi,nhj)2+diff(xij,xi,nmj)2.
解释说明: i i i是样本 i i i, x i , n h x_{i,nh} xi,nh是猜中近邻(near-hit),是同类样本中与 x i x_i xi最相近的, x i , n m x_{i,nm} xi,nm是猜错近邻(near-miss),是异类样本中与 x i x_i xi最相近的;如果特征取离散值,那么
d i f f ( a , b ) = { 1 , if a!=b 0 , if a=b diff(a,b)= \begin{cases} 1,&\text{if a!=b}\\ 0,&\text{if a=b} \end{cases} diff(a,b)={1,0,if a!=bif a=b
如果特征取连续值, d i f f ( a , b ) = ∣ a − b ∣ diff(a,b)=|a-b| diff(a,b)=∣a−b∣,前提 a , b a,b a,b已经规范化到0,1区间上了。
包裹式选择每次评估所选特征时都会估计学习器的误差,在西瓜书上提到的Las Vegas Wrapper(LVW)特征选择法如下图:
CrossValidation就是对学习器误差的估计,如果当前特征子集优,则选择当前子集。
递归消除特征法(recursive feature elimination,RFE)如下图(参考了上面的链接):
嵌入式选择是将特征选择和学习器训练结合在一起的,即学习器训练完,特征选择也完成了。
给定数据集,我们一般最小化损失函数,为了分析方便,损失函数选择平方误差,优化目标如下:
min w ∑ i = 1 m ( y i − w T x i ) 2 , x i , w − d × 1 , y i 为 标 量 , \min_w\sum_{i=1}^m(y_i-w^Tx_i)^2,\\x_i,w-d\times1,y_i为标量, wmini=1∑m(yi−wTxi)2,xi,w−d×1,yi为标量,
为了防止过拟合,我们一般会引入正则化项, L 2 L_2 L2正则化引入 λ ∥ w ∥ 2 2 \lambda\parallel w \parallel_2^2 λ∥w∥22, L 1 L_1 L1正则化引入 λ ∥ w ∥ 1 \lambda\parallel w \parallel_1 λ∥w∥1,其中, L 1 L_1 L1正则化比 L 2 L_2 L2正则化更易于获得稀疏解,即求得的 w w w会有 更多的非零分量,那么其中为零的项对应的特征即为过滤掉的特征。
那么我们的问题就是求解如下问题:
min w ∑ i = 1 m ( y i − w T x i ) 2 + λ ∥ w ∥ 1 \min_w\sum_{i=1}^m(y_i-w^Tx_i)^2+\lambda\parallel w \parallel_1 wmini=1∑m(yi−wTxi)2+λ∥w∥1
求解方法可以参考这篇博客,这边就不赘述了,其他的解法可以参考这篇博客。