1.前言
对于数据建模,流传着这么一句话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。可见,在数据建模过程中,特征工程是非常重要的一部分,没有好的特征,任何算法的表现效果都不会很好。
2.特征抽取
2.1数据预处理
1、数据无量纲化:当各特征的量纲不一样时,不能够放在一起比较,需要进行无量纲化处理。
2、缺失值处理:当缺失值相比于数据总体而言比例很小,并且总体数据量很大时,一般将缺失值直接删除,否则对缺失值进行填补,可以直接填补为特定的值,也可以用特征的均值、中位数、最大值等进行缺失值填补。
2.2特征构建
特征的构建包括原有的特征进行一定的加工处理,也包括在原有特征的基础上创建新的特征。主要包括:
1. 基于统计方法构造统计量;
2. 对某些连续特征进行离散化,以便去除冗余信息;
3. 对类别特征进行one-hot编码或者LabelEncoder,将其转换成定量特征;
4. 特征交叉
3.特征选择
特征选择主要有三种方法:
1. Fliter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
2. Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
3. Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
3.1Fliter 过滤法
3.1.1 方差选择法
使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。使用feature_selection库的VarianceThreshold类来选择特征,是特征选择中的一项基本方法。它会移除所有方差不满足阈值的特征。默认设置下,它将移除所有方差为0的特征,即那些在所有样本中数值完全相同的特征(类似常数特征)。
注:方差选择法的原理是剔除方差很小的那些特征,对于定量特征可以直接计算其方差,对于定性特征需要先对其数字化编码。对于定性变量还有一种方法,就是直接求其unique值,设定阈值来剔除unique值过少的特征。
3.1.2 卡方检验
经典的卡方检验是检验定性自变量对定性因变量的相关性,其计算公式为:假设自变量有N种取值,因变量有M种取值,考虑自变量等于i的样本频数的观察值与期望的差距,构建统计量:
其中, Ai A i 为 i i 水平的观察频数,为总频数, pi p i 为 i i 水平的期望频率,为单元格数。当 n n 比较大时,统计量近似服从 k−1 k − 1 (参数个数-1)个自由度的卡方分布。
具体例子参考 https://blog.csdn.net/snowdroptulip/article/details/78770088
3.1.3 相关系数方法
使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。
3.1.4 信息增益法
1.信息熵
信息熵是度量样本集和纯度的一个指标,信息熵值越小,样本集合的纯度越高,即不确定性越小。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合X划分效果的好坏,即信息增益。
2.信息增益
信息增益表示使用特征X划分样本集合Y后,相比于划分前减少的不确定性,
对于待划分的数据集Y,其 H(前)是一定的,但是划分之后的熵H(后)是不定的,H(后)越小说明使用此特征划分得到的子集的不确定性越小(也就是纯度越高),因此 H(前) - H(后)差异越大,说明使用当前特征划分数据集Y的话,其纯度上升得越快,因此我们总是选择使得信息增益最大的特征来划分当前数据集Y。
3.1.5 基尼系数法
1.基尼系数
基尼系数表示在样本集合中一个随机选中的样本被分错的概率, Gini系数和信息熵一样,代表样本集合的纯度。Gini系数越小表示集合中被选中的样本被分错的概率越小,也就是说集合的纯度越高,反之,集合越不纯。
pi p i 表示选中的样本属于 i i 类别的概率。
基于特征划分样本Y之后的基尼系数为:
基尼系数 Gini(Y,X) G i n i ( Y , X ) 表示经过特征 X X 划分后集合Y的不确定性,选择最小的特征,即为最优特征。
3.1.6 互信息法
1.信息量
信息熵是信息量的期望值。
2.点互信息
点互信息PMI(Pointwise Mutual Information)衡量两个事物之间的相关性(比如两个词)。
在概率论中,如果 x x 跟不相关,则 p(x,y)=p(x)p(y) p ( x , y ) = p ( x ) p ( y ) ;二者相关性越大,则 p(x,y) p ( x , y ) 就相比于 p(x)p(y) p ( x ) p ( y ) 越大。用后面的式子可能更好理解,在 y y 出现的情况下出现的条件概率 p(x|y) p ( x | y ) 除以 x x 本身出现的概率,自然就表示 x x 跟的相关程度。
3.互信息
互信息是点互信息的积分形式,在决策树中称为信息增益。两者的区别参考 https://www.zhihu.com/question/39436574/answer/88129270
3.1.7 IV值法
3.1.7.1 数据分箱
1.数据分箱包括:
1)将连续变量离散化;
2)将多状态的离散变量合并成少状态。
2.常用的数据分箱方法:
1)卡方分箱(ChiMerge)
自底向上的(即基于合并的)数据离散化方法。
它依赖于卡方检验:具有最小卡方值的相邻区间合并在一起,直到满足确定的停止准则。
基本思想:对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。而低卡方值表明它们具有相似的类分布。
详细的分箱算法如下:
(1)首先给定一个卡方阈值和最大区间数;
(2)初始化特征数据,对其进行排序,每个实例数据属于一个区间;
(3)计算每一对相邻区间的卡方值,将卡方值最小的一对区间合并;
(4)重复步骤3,直至卡方值达到给定阈值或者达到最大区间数,结束分箱。
- 卡方阈值的确定:
根据显著性水平和自由度得到卡方值自由度比类别数量小1。例如:有3类,自由度为2,则90%置信度(10%显著性水平)下,卡方的值为4.6。 - 阈值的意义
类别和属性独立时,有90%的可能性,计算得到的卡方值会小于4.6。 大于阈值4.6的卡方值就说明属性和类不是相互独立的,不能合并。如果阈值选的大,区间合并就会进行很多次,离散后的区间数量少、区间大。
2)等频分箱:最终每个区间的实例个数相同
3)等距分箱:根据特征数据进行等距离的区间划分
4)其他的分箱方法待补充
3.1.7.2 IV值
参考https://blog.csdn.net/shenxiaoming77/article/details/78771698
3.1.8 总结
以上filter过滤法,可以解释成单变量特征选择方法,所求的方差,相关系数,卡方,互信息都是针对某个变量或者是某个变量与目标变量的关系。这样,变量之间的相关性会被忽视,另外,最好特征个数的选取,以及方差阈值选择具有主观性,不过可通过超参数调优来获取最佳性能。
3.2 Wrapper 方法
3.2.1 递归特征消除法
对于一个为数据特征指定权重的预测模型(例如,线性模型对应参数coefficients),递归特征消除 (RFE)通过递归减少考察的特征集规模来选择特征。首先,预测模型在原始特征上训练,每项特征指定一个权重。之后,那些拥有最小绝对值权重的特征被踢出特征集。如此往复递归,直至剩余的特征数量达到所需的特征数量。
RFECV 通过交叉验证的方式执行RFE,以此来选择最佳数量的特征。
3.3 Embedded
3.3.1 基于惩罚项的特征选择法
该方法主要通过类SelectFromModel实现,该类作为一个基转换器可以用于拟合后任何拥有coef_或 feature_importances_属性的预测模型。
在参数L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个,所以没选到的特征不代表不重要。故,可结合L2惩罚项来优化。具体操作为:若一个特征在L1中的权值为1,选择在L2中权值差别不大且在L1中权值为0的特征构成同类集合,将这一集合中的特征平分L1中的权值,故需要构建一个新的逻辑回归模型:
3.3.2 基于树模型的特征选择法
sklearn中基于树模型的预测模型包括sklearn.tree和sklearn.ensembel。