一.特征提取和特征选择的区别

特征选择和降维(特征提取)有着些许的相似点,这两者达到的效果是一样的,就是试图去减少特征数据集中的属性(或者称为特征)的数目;但是两者所采用的方式方法却不同:降维的方法主要是通过属性间的关系,如组合不同的属性得到新的属性,这样就改变了原来的特征空间;而特征选择的方法是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间。

二.常用的特征选择方法有哪些?

特征选择是从样本集中选取重要的特征子集

比较有名的特征选择有过滤法(Filter),包裹法(Wrapper),嵌入法(Embedded)

先介绍几个和特征选择相关的名词:

特征发散如果特征不发散,也就是说特征的方差趋近于0,则代表这个特征上不同样本之间没有差异性,对区分样本的作用基本不存在。

特征与目标的相关性所谓相关性,就是说特征和目标值之间存在正相关(随着目标值的变大特征值也逐渐变大)或者负相关的特性。代表了特征值和目标值之间具有很强的数据上的因果关系。

1.过滤法

过滤法就是按照发散性或者相关性对各个特征进行评分,设定阈值或者选择阈值的个数,完成特征选择。

1)方差法:这种方法通过计算每个特征的均值和方差,设定一个基础阈值,当该维度的特征方差小于基础阈值时,则丢弃该特征。这种方法简单高效的过滤了一些低方差的特征,但是存在一个问题就是阈值的设定是一个先验条件,当设置过低时,保留了过多低效的特征,设置过高则丢弃了过多有用的特征。

2)单变量特征选择:单变量特征选择能够对每一个特征进行测试,衡量该特征和响应变量之间的关系,根据得分扔掉不好的特征。单变量特征选择方法,独立的衡量每个特征与响应变量之间的关系

卡方检验对于回归和分类问题可以采用卡方检验等方式对特征进行测试。

卡方检验是数理统计中一种常用的检验两个变量独立性的方法。

卡方检验最基本的思想就是通过观察实际值与理论值的偏差来确定理论的正确与否。

具体做的时候常常先假设两个变量确实是独立的(行话就叫做“原假设”),然后观察实际值(也可以叫做观察值)与理论值(这个理论值是指“如果两者确实独立”的情况下应该有的值)的偏差程度,如果偏差足够小,我们就认为误差是很自然的样本误差,是测量手段不够精确导致或者偶然发生的,两者确确实实是独立的,此时就接受原假设;如果偏差大到一定程度,使得这样的误差不太可能是偶然产生或者测量不精确所致,我们就认为两者实际上不是相互独立的,即否定原假设,而接受备择假设。

在分类任务的特征选择阶段,我们主要关心一个随机变量(某一特征)与另一个随机变量(样本类别)之间是否相互独立?如果独立,就可以说该特征对样本类别的确定不起作用,即我们根本无法根据该特征出现与否来判断该样本是否属于这个分类。

注意:首先我们需要明白对特征选择来说原假设是什么,因为计算出的卡方值越大,说明对原假设的偏离越大,我们越倾向于认为原假设的反面情况是正确的。通常我们一般使用”特征xi与类别y不相关“来做原假设。选择的过程也变成了为每个特征xi计算它与类别y的卡方值,从大到小排个序(此时开方值越大越相关),取前k个就可以(因为是从大到小排序的,卡方值越大说明越偏离特征xi与类别y不相关的这个原假设,那么特征和类别相关性就越大)。

总结:卡方通常用于检验两个变量间的独立性,在做特征选择时我们希望检验每个特征和类别之间的独立性,对于每个特征我们假设特征和类别相互独立。卡方值越大越偏离于这个假设,说明特征和类别不相互独立是我们想要选择的特征,因此对卡方值从大到小进行排序,选择前k个。

互信息法选择特征样例

什么是互信息?

互信息(Mutual Information)是信息论里一种有用的信息度量,它可以看成是一个随机变量中包含的关于另一个随机变量的信息量,或者说是一个随机变量由于已知另一个随机变量而减少的不肯定性。

2.包裹法(Wrapper)

所谓包裹法就是选定特定算法,然后再根据算法效果来选择特征集合。

就是通过不断的启发式方法来搜索特征,主要分为如下两类。

方法一:选择一些特征,逐步增加特征保证算法模型精度是否达标。

方法二:删除一些特征,然后慢慢在保持算法精度的条件下,缩减特征。

即为选用那些本就提供特征重要性测量的模型,直接调用相应方法进行特征选择。

1)利用线性回归模型

这个不常用,因为真实数据的线性关系不是很好,故应选择能处理非线性的随机森林模型,它精确度更高,也提供预测特征重要性的方法。

lr.coef_  lr为创建的模型,会输出形如:

Linear model: -1.291 * X0 + 1.591 * X1 + 2.747 * X2    通过特征前的权重值来判断特征的重要性

2)RF选取重要特征的依据

平均不纯度减少(MDI):表示每个特征对误差的平均减少程度。

平均精确率减少(MDA):打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率的影响。对于不重要的特征来说,打乱顺序对模型的精确率影响不会太大,但是对于重要的特征来说,打乱顺序就会降低模型的精确率。

3)sklearn GBDT是根据非叶子节点在分裂时加权不纯度减少的程度来衡量的,减少得越多说明特征越重要。不纯度的减少实际上就是该节点此次分裂的收益,因此我们也可以这样理解,节点分裂时收益越大,该节点对应的特征的重要度越高。(收益的计算参考:)

4)XGBoost则有三种方法(get_score)

weight:特征用来作为分裂点的次数

gain:使用特征进行切分的平均增益

cover:某个特征在某个结点进行分裂时所覆盖的样本个数

3.嵌入法(Embedded)

就是利用正则化的思想,将部分特征属性的权重调整到0,则这个特性相当于就是被舍弃了。(其实就是在损失函数上再加入正则项,不断的利用梯度下降极小化损失函数,调整一些特征的权重,有些权重变为0了则相当于被舍弃了,没被舍弃的相当于被选择出来的向量。)

L1正则方法具有稀疏解的特性,因此天然具备特征选择的特性,但是要注意,L1没有选到的特征不代表不重要,原因是两个具有高相关性的特征可能只保留了一个,如果要确定哪个特征重要应再通过L2正则方法交叉检验;

常用的特征提取方法有哪些?

常用的方法有主成分分析(PCA),独立成分分析(ICA),线性判别分析(LDA)一般数据是有类别的,最好先考虑用LDA降维。也可先用小幅度的PCA降维消除噪声再用LDA降维,若训练数据没有类别优先考虑PCA。

特征提取是由原始输入形成较少的新特征,它会破坏数据的分布,为了使得训练出的模型更加健壮,若不是数据量很大特征种类很多,一般不要用特征提取。

1.PCA

作为一个非监督学习的降维方法它只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。为了克服PCA的一些缺点,出现了很多PCA的变种,比如为解决非线性降维的KPCA,还有解决内存限制的增量PCA方法Incremental PCA,以及解决稀疏数据降维的PCA方法Sparse PCA等。

PCA是最常用的线性降维方法它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大(样本的分布最散乱)以使用较少的数据维度同时保留住较多的原数据点的特征

PCA的优缺点分析:

优点:

第一、仅仅需要以方差衡量信息量,不受数据集以外的因素影响。第二、各主成分之间正交,可消除原始数据成分间的相互影响的因素。第三、计算方法简单,主要运算是特征值分解,易于实现。

缺点:

第一、提取出的各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。第二、PCA会消除一些类信息,但是方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。

 2.LDA

LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。

LDA的优缺点分析:

LDA算法的主要优点有:

1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。

2)LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

LDA算法的主要缺点有:

1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。

2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。

3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。

4)LDA可能过度拟合数据。