1、特征工程是什么

有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见对数据和特征的处理是机器学习的基石,也就是我所理解的特征工程。特征工程本质上是一个工程问题,机器学习的脏活累活。却也是不可获取至关重要的工作。业界广为流传的一张特征工程思维导图如下:

                   

机器学习中的特征工程SIFT和HOG 特征工程ppt_机器学习中的特征工程SIFT和HOG

从上图可以看出,特征处理是特征工程的核心。接下来就分两部分来分别介绍我所理解的特征工程。

2、数据预处理

2.1、缺失值的处理

2.1.1、为什么处理缺失值

在实践中,缺失值产生的原因很多,在数据的生产、采集、传输、存储环节都可能产生缺失值。对缺失值的处理,有助于还原真实的数据,从而提升算法效果。所以缺失值的处理是有需要的。

2.1.2、直接删除

在数据缺失比例较大时,直接删除是比较好的做法。因为数据缺失比例较大时,数据可靠性低,容易成为noise。

2.1.3、用均值/中位数/众数/插值替换

1、当数据有大小含义时,如果分布比较均匀,可以考虑使用均值替换缺省值;否则可以考虑使用中位数替换缺省值。

2、当数据无大小含义时,可以考虑使用众数替换缺省值。

3、使用随机差值或者牛顿插值、拉格朗日插值等替换。

2.1.4、用模型预估

建立以缺失特征为预估目标的模型,预估缺失值。

2.1.4、高维映射

对于类别/离散特征,可以增加一个类别表示特征缺失,从而完全保留特征缺失这一信息;对于连续型特征,在特征离散化以后 ,也可以进行类似操作。

Tips:

一个trick,可以用多种方法将缺失值衍生出新特征,然后把衍生特征放入到可解释模型中,根据模型中得出的特征重要性相关性等指标选择缺失值处理方法。

2.2、异常值的处理

2.2.1、为什么需要处理异常值

和缺失值一样的原因。当然如果使用的是对异常值鲁棒的模型,比如SVM、KNN、RF,可以不处理异常值;而使用对于异常值敏感的模型,比如K-means、AdaBoost,则必须处理异常值。

需要注意的是,异常值并非都是不真实数据。比如姚明身高2.24米,在普通人的身高数据中,可以认为是异常值,但它是真实的。

2.2.2、异常值的发现

1、数据统计+可视化

  通过简单的频次、距离分析,辅之以可视化手段,可以发现大多数异常。

2、3∂原则分析

  若数据服从正态分布,则数据产生于均值3∂之外的概率为P(|x-u| > 3∂) <= 0.003,属于小概率事件,基于此,观测值与平均值的偏差超过3倍标准差的数值;若数据不服从正态分布,也可以用远离平均值多少倍标准差的方式描述异常值。

3、箱型图分析

     箱型图提供了识别异常值的标准,一个正常的箱型图从上至下分别为:上边缘(最小值),上四分位数(前25%),中位数,下四分位数(后25%)和下边缘,超脱此范围的被视为异常值,

4、模型检测

  建立一个数据模型,异常值是那些无法完美拟合模型的对象。如果模型是簇的集合,异常值就是不显著属于某个簇的对象,如果模型是回归模型,则异常值是远离预测值的对象。

5、基于聚类

  使用聚类检测离群点的方法。

2.2.3、异常值的处理

1、删除。对于明显异常,且异常值数据量较小,可直接删除。

2、截断。对于一些有真实物理含义,且真实可靠的异常值,可以酌情截断。比如在电商里,双十一的某些统计特征和平时会有很大不同,可以考虑截断。

3、类似缺失值一样处理。

 

2.3、连续特征无量纲化

这个内容的名称和划分比较乱:有的地方把缩放和归一化统称归一化;有的地方把标准缩放叫标准化,其它缩放叫区间缩放。称呼不一而足,这里根据作用域的不同。采用如下的划分。

2.3.1、缩放

1、标准缩放/Z-Score,公式如下:

    

经过处理的数据符合标准正态分布,即均值为0,标准差为1。该种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。

2、简单缩放/最大最小值缩放,公式如下:

在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用这种方法。

3、其它

包括一些对于稀疏数据、离群点等缩放方法等。就不一一整理了。

Tips:

在不同特征数据量纲不一致时,模型可能会:1)倾向于学习值范围较大的特征;2)梯度下降时,下降线路呈Z字形。如下图左:

机器学习中的特征工程SIFT和HOG 特征工程ppt_数据_02

从而导致模型训练缓慢。缩放有助于缓解以上问题。

2.3.2、归一化

缩放和归一化的区别在于:标准化是依照特征矩阵的列处理数据,将样本的特征值转化到同一量纲下。而归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或者其他核运算计算相似度时,拥有统一的标准,也即是都转化为“单位向量”。规则为L2 的归一化公式为:

 

2.4、类别特征One-hot编码

 

2.5、连续/离散特征转化

2.5.1、为什么做连续/离散特征转化

连续到离散:

1) 一般的离散方法都可以增加对异常点的鲁棒性;

2) 一个特征离散成多个特征,增加了非线性表达能力。参考:<a href=''>对于特征离散化,特征交叉,连续特征离散化非常经典的解释</a>

离散到连续:

1) 某些模型缺乏离散特征处理能力;

2) 精心设计的连续特征对模型有很好的效果提升。

2.5.2、连续特征离散化方法

1、等频离散:把连续特征有序排列,然后等频分桶,相同桶中的样本有相同的离散值。

2、等距离散: 统计有序特征的最大最小值,根据离散类数量分割区间。

3、基于信息增益的方法:类似决策树中的特征分裂方法。细节不描述了。

4、基于卡方检验的方法:

     包括两种方案,一种是自顶向下方案,一种是自底向上方案。

     1)自顶向下方案,对每个可能的分裂点做尝试,看哪个分裂点计算出的p值小,并且小于阈值$\alpha$,就以此点分裂;以此类推,直到$p>=\alpha$;

     2) 自底向上方案,两两合并相邻点,看看哪两个点$p>=\alpha$就合并,以此类推;直到$p<\alpha$。

Tips:

我所经历的实践中,几乎没有用过等频等距以为的离散方法(基本都是等频等距混合使用)。尝试过基于信息增益的方法,有一定提升,但是基于信息增益的方法,很难自动化。所以工程中没有使用。

2.5.3、离散特征连续化方法

一种据说非常有效的方法:将样本按照一定规则排序,统计在此样本前出现此特征的正负样本个数,以此统计量作为连续特征,新增或替换原来离散特征。这种方法可以结合树模型(可以对树模型不方便处理的离散特征进行转换)使用。

3、特征选择

3.1、特征选择的一般流程

特征选择的的一般流程是, 找一个集合,然后针对某个学习算法, 测试效果如何, 一直循环直到找到最优集合为止。如下图:

机器学习中的特征工程SIFT和HOG 特征工程ppt_特征选择_03

固定一个算法, 然后搜索(Search)一个测试子集, 然后进行Cross-Validation进行评价,直到找到最优目标。当特征数量较小时,暴力搜索和一些启发性搜索算法如贪心法、模拟退火、基因算法、邻居搜索都是可以考虑的。基于Cross-Validation和基因算法的一般流程列在如下:

机器学习中的特征工程SIFT和HOG 特征工程ppt_特征选择_04

但是基于特征子集搜索的算法会有子集数组合爆炸的问题。在特征子集较大时,可以考虑过滤(Filter)、包裹(Wrapper)、嵌入(Embedded)的方法。其大致流程如下图:

机器学习中的特征工程SIFT和HOG 特征工程ppt_缺失值_05

3.2、过滤(Filter)

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

3.2.1、方差过滤法

方差过滤法需要计算每个特征的方差,然后根据阈值删除取值小于阈值的特征。

3.2.2、相关系数法

皮尔森相关系数

是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关(这个变量下降,那个就会上升),+1表示完全的正相关,0表示没有线性相关。Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0。

距离相关系数

距离相关系数是为了克服Pearson相关系数的弱点而生的。在x和x^2这个例子中,即便Pearson相关系数是0,我们也不能断定这两个变量是独立的(有可能是非线性相关);但如果距离相关系数是0,那么我们就可以说这两个变量是独立的。

3.2.3、卡方检验法

卡方检验用于衡量离散特征对离散目标变量的相关性,其计算公式为: 

机器学习中的特征工程SIFT和HOG 特征工程ppt_机器学习中的特征工程SIFT和HOG_06

其中,Ai为特征A第 i 个取值的观察频数,Ei为特征A第 i 个取值的期望频数,n为总频数,pi为第 i 个取值的期望频率。

3.2.4、最大信息系数法

互信息(Mutual information)用于评价离散特征对离散目标变量的相关性,互信息计算公式如下: 

                             

机器学习中的特征工程SIFT和HOG 特征工程ppt_数据_07

互信息用于特征选择有以下缺点:

1.它不属于度量方式,也没有办法归一化,在不同数据集上的结果无法做比较;

2.对于连续变量的计算不是很方便(X和Y都是集合,x,y都是离散的取值),通常变量需要先离散化,而互信息的结果对离散化的方式很敏感。

最大信息系数(Maximal Information Coefficient, MIC)克服了这两个问题。它首先寻找一种最优的离散化方式,然后把互信息取值转换成一种度量方式,取值区间在[0,1]。

3.3、包裹(Wrapper)

包裹法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。

递归特征消除

递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程。

3.4、嵌入(Embedded)

嵌入法,将特征选择过程和机器训练过程融合为一体。两者在同一优化过程中完成,即在学习器训练过程中自动进行了特征选择。

3.4.1、线性模型和正则化

总所周知,L1/Lasso可以产生稀疏性特征,L2/Ridge可以产生平滑特征,防止过拟合。在特征选择中,可以运用这个特性。

首先用L1选择出部分特征。然后结合L2来优化。具体操作为:若一个特征在L1中的权值为1,选择在L2中权值差别不大且在L1中权值为0的特征构成同类集合,将这一集合中的特征平分L1中的权值。

这么做的目的在于: 对于共线性的特征,L1会的特征选择会比较不稳定,L2可以缓解这个问题。例如:Y=X1+X2为例,假设X1和X2具有很强的关联,如果用L1正则化,不论学到的模型是Y=X1+X2还是Y=2X1,惩罚都是一样的,都是2alpha。但是对于L2来说,第一个模型的惩罚是2alpha,第二个模型的是4*alpha。可以看出,系数之和为常数时,各系数相等时惩罚是最小的,所以才有了L2会让各个系数趋于相同的特点。这样L2就选择出了X1, X2两个特征。

3.4.2、树模型

平均不纯度减少

随机森林由多个决策树构成。决策树中的每一个节点都是基于某个特征的将数据集按照不同的label一分为二。利用随机森林提供的不纯度可以进行特征选择,对于分类问题,通常采用基尼指数或者信息增益;对于回归问题,通常采用的是方差或者最小二乘拟合。当训练随机森林时,可算出每个特征平均减少了多少不纯度,并把它平均减少的不纯度作为特征选择的依据。

平均精确率减少

另一种常用的特征选择方法就是直接度量每个特征对模型精确率的影响。主要思路是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率的影响。很明显,对于不重要的变量来说,打乱顺序对模型的精确率影响不会太大,但是对于重要的变量来说,打乱顺序就会降低模型的精确率。

4、其它

以上综合性地简述了特征工程中的数据处理和特征选择问题,在特征工程及其周边中,还有一些重要的问题需要处理。