特征选择方法
一、绪论
1.为什么要做特征选择
在有限的样本数目下,用大量的特征来设计分类器计算开销太大而且分类性能差。减少特征数量/降维,使模型泛化能力更强,减少过拟合,增强对特征和特征值之间的理解。
通俗讲,就是在高维小样本情况下(小n大p),模型拟合不好(统计学研究的热门方向)且浪费资源(计算机研究方向)。
2.特征选取的原则
获取尽可能小的特征子集,不显著降低分类精度、不影响类分布以及特征子集应具有稳定适应性强等特点
3.特征选择需要考虑的问题
a、确定选择算法,在允许的时间内以最小的代价找出最小的、最能描述类别的特征组合
b、确定评价标准,衡量特征组合是否是最优,得到特征获取操作的停止条件。
二、特征选择方法
(一)专家推荐和业务理解
此种方法是最基本、最简单也是最重要的一步。
当数据准备好,几百个特征摆在眼前,如果我们对业务很熟悉,有比较深刻的理解,我们自然能知道哪些特征很重要,而哪些特征没什么用,这样就自然而然的去掉了一些特征,再继续使用其他方法进行特征选择。
(二)过滤式
其主要思想是:对每一维的特征“打分”,即给每一维的特征赋予权重,这样的权重就代表着该维特征的重要性,然后依据权重排序。
主要的方法有:Chi-sauared test(卡方检验),ID3(信息增益),correlation coefficientscores(相关系数)
1.方差选择法
from sklearn.feature_selection import VarianceThreshold
a. 特征值需为离散型变量,若是连续型,需要连续变量离散化。(个人存疑,认为连续性也可以)
b. 最简单,实用性差,可作为特征选择预处理。
问:为什么方差可以用来选择特征?
理论上是认为在样本集上如果当前特征基本上都差异不大,因此可以认为这个特征对我们区分样本贡献不大,因此可以在构造特征过程中可以将其去掉。(方差小,没有区分度)
2.Pearson相关系数
Pearson Correlation Coefficient(皮尔逊相关系数)表示2个向量的线性相关程度。
from scipy.stats import pearsonr
在运用Pearson方法时,有一个很重要的前提:要对其进行显著性检验。我们的数据是从真实世界采集的,不一定代表真实世界数据的分布,即存在抽样误差,这就导致我们计算的皮尔逊相关性系数不一定有意义。至于如何证明二者有意义,这篇文章就不详细说了。聪明的数学家想到使用T检验计算一个值P-value,如果P-value小于0.05(大部分研究使用),就表明有95%的置信度相信真实世界的数据是有相关性的
- 使用Pearson方法的数据应满足正态分布。这是显著性检验方法T检验的前提。
- 皮尔逊相关系数是用于衡量线性相关关系的,在不清楚数据分布的情况下,不能直接比较皮尔逊相关系数。比较简单的方法是画散点图看一下大概趋势。
- 异常值会对结果产生较大影响。
- 当皮尔逊相关系数为0,不能说明其完全不相关,可能是非线性相关。
3.Spearman相关系数
Spearman Correlation Coefficient(斯皮尔曼相关系数)表示2个向量的单调相关程度,即变量Y随X增大而增大或者减小的程度,其取值范围为[-1,1]。
from scipy.stats import spearmanr
- 使用斯皮尔曼方法,没有对数据分布的要求
- 斯皮尔曼相关系数表示的是2个向量的单调相关程度,即变量Y随X增大而增大或者减小的程度,即使其值为0,也不能说明完全不相关,因为可能是其他非单调相关
4.Kendall相关系数
from scipy.stats import kendalltau
a. 是表示多列等级变量相关程度的一种方法。
b. 一般采用等级评定的方法,即让K个评价者对N件事物进行等级评定,每个评价者都能对N件事物排出一个等级顺序。K个评价者便可得到K列从1至N的等级变量数据。这类K列等级变量数据综合起来求相关,可用肯德尔系数。
5.卡方检验
from sklearn.feature_selection import chi2
(1)什么是卡方检验?
用方差来衡量某个观测频率和理论频率之间差异性的方法
(2)什么是皮尔森卡方检验?
这是一种最常用的卡方检验方法,它有两个用途:1是计算某个变量对某种分布的拟合程度,2是根据两个观测变量的Contingency table来计算这两个变量是否是独立的。主要有三个步骤:第一步用方差和的方式来计算观测频率和理论频率之间卡方值;第二步算出卡方检验的自由度(行数-1乘以列数-1);第三步比较卡方值和对应自由度的卡方分布,判断显著性。
(3)什么是p-value?
简单地说,p-value就是为了验证假设和实际之间一致性的统计学意义的值,即假设检验。有些地方叫右尾概率,根据卡方值和自由度可以算出一个固定的p-value
6.最大信息系数(MIC)
(from minepy import MINE )
a. MIC具有普适性,不限定于特定的函数类型(如线性函数、指数函数或周期函数。
b.互信息直接用于特征选择不太方便:1、它不属于度量方式,也没有办法归一化,在不同数据及上的结果无法做比较;2、对于连续变量的计算不是很方便,通常变量需要先离散化,而互信息的结果对离散化的方式很敏感。
c. Mic首先寻找一种最优的离散化方式,然后把互信息取值转换成一种度量方式,取值区间在[0,1]。
想把互信息直接用于特征选择其实不是太方便:1、它不属于度量方式,也没有办法归一化,在不同数据及上的结果无法做比较;2、对于连续变量的计算不是很方便(X和Y都是集合,x,y都是离散的取值),通常变量需要先离散化,而互信息的结果对离散化的方式很敏感。
7.距离相关系数 (Distance correlation)
距离相关系数是为了克服Pearson相关系数的弱点而生的。在x和x^2这个例子中,即便Pearson相关系数是0,我们也不能断定这两个变量是独立的(有可能是非线性相关);但如果距离相关系数是0,那么我们就可以说这两个变量是独立的。
8.基于学习模型的特征排序 (Model based ranking)
这种方法的思路是直接使用你要用的机器学习算法,针对每个单独的特征和响应变量建立预测模型。
其实Pearson相关系数等价于线性回归里的标准化回归系数。
假如某个特征和响应变量之间的关系是非线性的,可以用基于树的方法(决策树、随机森林)、或者扩展的线性模型等。基于树的方法比较易于使用,因为他们对非线性关系的建模比较好,并且不需要太多的调试。但要注意过拟合问题,因此树的深度最好不要太大,再就是运用交叉验证。
(三)嵌入式
单变量特征选择方法独立的衡量每个特征与响应变量之间的关系,另一种主流的特征选择方法是基于机器学习模型的方法。有些机器学习方法本身就具有对特征进行打分的机制,或者很容易将其运用到特征选择任务中,例如回归模型,SVM,决策树,随机森林等等。说句题外话,这种方法好像在一些地方叫做wrapper类型,大概意思是说,特征排序模型和机器学习模型是耦盒在一起的,对应的非wrapper类型的特征选择方法叫做filter类型。
1.正则化模型
正则化就是把额外的约束或者惩罚项加到已有模型(损失函数)上,以防止过拟合并提高泛化能力。损失函数由原来的E(X,Y)变为E(X,Y)+alpha||w||,w是模型系数组成的向量(有些地方也叫参数parameter,coefficients),||·||一般是L1或者L2范数,alpha是一个可调的参数,控制着正则化的强度。当用在线性模型上时,L1正则化和L2正则化也称为Lasso和Ridge。
2. L1正则化–Lasso
L1正则化将系数w的l1范数作为惩罚项加到损失函数上,由于正则项非零,这就迫使那些弱的特征所对应的系数变成0。因此L1正则化往往会使学到的模型很稀疏(系数w经常为0),这个特性使得L1正则化成为一种很好的特征选择方法。
3. L2正则化–Ridge regression
L2正则化将系数向量的L2范数添加到了损失函数中。由于L2惩罚项中系数是二次方的,这使得L2和L1有着诸多差异,最明显的一点就是,L2正则化会让系数的取值变得平均。对于关联特征,这意味着他们能够获得更相近的对应系数。还是以Y=X1+X2为例,假设X1和X2具有很强的关联,如果用L1正则化,不论学到的模型是Y=X1+X2还是Y=2X1,惩罚都是一样的,都是2alpha。但是对于L2来说,第一个模型的惩罚项是2alpha,但第二个模型的是4*alpha。可以看出,系数之和为常数时,各系数相等时惩罚是最小的,所以才有了L2会让各个系数趋于相同的特点。
可以看出,L2正则化对于特征选择来说一种稳定的模型,不像L1正则化那样,系数会因为细微的数据变化而波动。所以L2正则化和L1正则化提供的价值是不同的,L2正则化对于特征理解来说更加有用:表示能力强的特征对应的系数是非零
备注:
L2并不能做特征选择,因为不能将系数压缩到0。L1才可以做特征选择。但大部分网上资料都直接将L2归入特征选择方法里。L2是增加了模型稳定性。要兼顾模型稳定性和特征选择就得用弹性网
(四)随机森林
随机森林具有准确率高、鲁棒性好、易于使用等优点,这使得它成为了目前最流行的机器学习算法之一。随机森林提供了两种特征选择的方法:mean decrease impurity和mean decrease accuracy。
1.平均不纯度减少 mean decrease impurity
随机森林由多个决策树构成。决策树中的每一个节点都是关于某个特征的条件,为的是将数据集按照不同的响应变量一分为二。利用不纯度可以确定节点(最优条件),对于分类问题,通常采用基尼不纯度或者信息增益,对于回归问题,通常采用的是方差或者最小二乘拟合。当训练决策树的时候,可以计算出每个特征减少了多少树的不纯度。对于一个决策树森林来说,可以算出每个特征平均减少了多少不纯度,并把它平均减少的不纯度作为特征选择的值。
2.平均精确率减少 Mean decrease accuracy
另一种常用的特征选择方法就是直接度量每个特征对模型精确率的影响。主要思路是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率的影响。很明显,对于不重要的变量来说,打乱顺序对模型的精确率影响不会太大,但是对于重要的变量来说,打乱顺序就会降低模型的精确率。
(五) 包裹式
其主要思想是:将子集的选择看作是一个搜索寻优问题。生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题,这里有很多的优化算法可以解决,尤其是一些启发式的优化算法,如GAPSODEABC等,详见“优化算法一-人工蜂群算法(ABC)”,“优化算法–粒子群算法(PSO)”。
主要方法有:recursive feature elimination algorithm(递归特征消除算法)
之所以叫做顶层,是因为他们都是建立在基于模型的特征选择方法基础之上的,例如回归和SVM,在不同的子集上建立模型,然后汇总最终确定特征得分。
1.稳定性选择 Stability selection
稳定性选择是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断的重复,最终汇总特征选择结果,比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近于0。
2.递归特征消除 Recursive feature elimination (RFE)
递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法。
RFE的稳定性很大程度上取决于在迭代的时候底层用哪种模型。例如,假如RFE采用的普通的回归,没有经过正则化的回归是不稳定的,那么RFE就是不稳定的;假如采用的是Ridge,而用Ridge正则化的回归是稳定的,那么RFE就是稳定的。
特征获取方法的选取原则
注:
什么是响应变量(response value)?简单地说,模型的输入叫做explanatroy variables,模型的输出叫做response variables,其实就是要验证该特征对结果造成了什么样的影响