机器学习之特征选择

1. 什么是特征选择

特征选择,顾名思义,就是在数据样本的一大堆特征中筛选出一些特征,用于后续的模型学习。与降维不同,特征选择只会选择特征而不会组合特征。常见的特征选择方法可以归为三大类,分别是过滤法,包裹法和嵌入法。

2. 过滤法

过滤法的主要思想是对每个特征计算统计量,去掉统计量不符合阈值要求的特征,保留统计量符合阈值要求的特征。统计量可以是方差,卡方检验,皮尔森系数,互信息等等,也可以是单独使用该特征训练模型在验证集上的表现。过滤法更多的是处理单特征,即每个特征单独作用,单独计算指标,然后按照指标过滤。

利用方差筛选

这个方法单独计算每个特征的方差,方差越大,说明数据样本在这个特征上的取值越发散;方差越小,说明数据样本在该特征上重复取值的可能性越大。当存在大量数据样本在一个特征上取值相同时,如果不存在数据不均衡问题,则这个特征对模型预测的贡献一般会比较小,所以可以去除方差小于某个阈值的特征。但是这种方法会受到不同特征量纲不一致的影响,一种可能可以的方法是利用最大最小值归一化的方法将特征值映射到$[0,1]$的范围再计算方差。

卡方检验方法

卡方检验的过程是这样的,首先我们认为特征$X$是离散随机变量,特征$Y$也是离散随机变量。我们假设$X$和$Y$是独立的,所以理论上,无论$X$取什么值,$Y$的条件分布都应该是不变的,即$Y$的分布应该有:

这样我们就可以根据从数据集中统计出来的$P(y)$得到每个$P(y|x)$,利用$P(x)P(y|x)$乘上数据样本数得到在每个$X$下每个$Y$理论频数$t(x,y)$。然后我们又可以通过在数据集上统计得到实际频数$f(x,y)$,然后根据下式求出卡方检验值:

经过证明,上述式子符合卡方分布。使用由上式求得的值通过查表可以得到$X$和$Y$是独立的这一假设有多大可能性成立,然后就可以确定特征$X$对$Y$是否有用了。对每个特征都重复这个过程,保留与$Y$相关可能性最大的前$K$个特征完成特征选择。

皮尔森系数

皮尔森系数的计算公式如下:

即皮尔森系数等于特征的协方差除以两个特征标准差之积。皮尔森系数可以测量两个变量的线性相关性,但不能测量非线性相关性,即当两个变量的皮尔森系数值为0时,只能说两个变量线性不相关,但不能说无关,因为也可以是非线性相关,比如$y=x^2$。皮尔森系数的取值范围是$[-1,1]$,在判断相关性质上与协方差相似,但一个优势是皮尔森系数不受$X$和$Y$的量纲的影响。很多时候先对特征作标准化然后计算协方差,其实就是计算皮尔森系数。使用皮尔森系数对特征作筛选,可以除去绝对值较小的特征,但也需要注意可能存在非线性相关的特征。

基于模型性能的特征选择

使用单特征的数据样本对模型进行训练,比如可以使用决策树,随机森林等树模型,这类模型可以处理非线性相关的特征。然后使用训练好的模型在验证集上计算性能指标,根据指标值对特征进行筛选。

3. 包裹法

包裹法最常见的方法是递归特征消除。递归特征消除要求基学习器可以计算特征重要性。逻辑回归模型可以依据学习到的权重参数$w$作为特征的重要性;决策树,随机森林等树模型可以依据选择特征进行分裂的指标来确定特征重要性。最通用的做法是在某个特征上添加噪声,然后分析添加噪声前后模型的性能变化,变化较大说明该特征对模型预测的影响大,即特征的重要性大。

递归特征消除的过程就是在每轮迭代,依据特征重要性指标,去除重要性小的特征,然后重复这个过程,直到达到结束条件。可以有两种方法,一种是按照贪心的思路,一路往前不回头。另一种是加入回溯,搜索出特征的最佳组合。

4. 嵌入法

嵌入法就是将特征选择与模型训练的过程结合到一起,让模型能够自动筛选特征。最典型的应用就是逻辑回归模型加L1正则化。加入L1正则化可以得到稀疏的参数,即很多参数值为0,那些值为0的参数所对应的特征就是模型自动筛选掉的特征。决策树和随机森林这些树模型也是在训练模型时自动就可以完成特征选择。