特征工程

特征工程导图

在这里插入图片描述

引言

坊间常说:“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。在实际应用当中,可以说特征工程是机器学习成功的关键。纵观Kaggle、KDD等国内外大大小小的比赛,每个竞赛的冠军其实并没有用到很高深的算法,大多数都是在特征工程这个环节做出了出色的工作,然后使用一些常见的算法,比如LR,就能得到出色的性能。遗憾的是,在很多的书籍中并没有直接提到特征工程,更多的是特征选择。

本文主要通过以下三个问题出发来理解特征工程:

特征工程是什么?
为什么要做特征工程?
应该如何做特征工程?
特征工程是什么?
当你想要你的预测模型性能达到最佳时,你要做的不仅是要选取最好的算法,还要尽可能的从原始数据中获取更多的信息。那么问题来了,你应该如何为你的预测模型得到更好的数据呢?

想必到了这里你也应该猜到了,是的,这就是特征工程要做的事,它的目的就是获取更好的训练数据。

那么,到底什么是特征工程?我们知道,数据是信息的载体,但是原始的数据包含了大量的噪声,信息的表达也不够简练。特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。使用特征表示的信息,信息损失较少,原始数据中包含的规律依然保留。此外,特征还需要尽量减少原始数据中的不确定因素(白噪声、异常数据、数据缺失…等等)的影响。

特征工程的重要性

为什么在实际工作中都要有特征工程这个过程,下面不同的角度来分析一下。

首先,我们大家都知道,数据特征的选择会直接影响我们模型的预测性能。你可以这么说:“选择的特征越好,最终得到的性能也就越好”。这句话说得没错,但也会给我们造成误解。事实上,你得到的实验结果取决于你选择的模型、获取的数据以及使用的特征,甚至你问题的形式和你用来评估精度的客观方法也扮演了一部分。此外,你的实验结果还受到许多相互依赖的属性的影响,你需要的是能够很好地描述你数据内部结构的好特征。

(1)特征越好,灵活性越强

只要特征选得好,即使是一般的模型(或算法)也能获得很好的性能,因为大多数模型(或算法)在好的数据特征下表现的性能都还不错。好特征的灵活性在于它允许你选择不复杂的模型,同时运行速度也更快,也更容易理解和维护。

(2)特征越好,构建的模型越简单

有了好的特征,即便你的参数不是最优的,你的模型性能也能仍然会表现的很nice,所以你就不需要花太多的时间去寻找最有参数,这大大的降低了模型的复杂度,使模型趋于简单。

(3)特征越好,模型的性能越出色

显然,这一点是毫无争议的,我们进行特征工程的最终目的就是提升模型的性能。

特征工程三个子问题

特征构建

特征构建是指从原始数据中人工的找出一些具有物理意义的特征。需要花时间去观察原始数据,思考问题的潜在形式和数据结构,对数据敏感性和机器学习实战经验能帮助特征构建。除此之外,属性分割和结合是特征构建时常使用的方法。

下面我们结合具体场景做一些简单介绍:

时间戳处理
时间戳属性通常需要分离成多个维度比如年、月、日、小时、分钟、秒钟。通常时间序列数据会含有一定的趋势和周期性,这时需要我们去构建趋势因子和周期因子。

分解类别属性
一些属性是类别型而不是数值型,举一个简单的例子,由{红,绿、蓝}组成的颜色属性,最常用的方式是把每个类别属性转换成二元属性,即从{0,1}取一个值。因此基本上增加的属性等于相应数目的类别,并且对于你数据集中的每个实例,只有一个是1(其他的为0),这也就是独热(one-hot)编码方式。当然这个方法并不是唯一的。

分箱和分区
有时候,将数值型属性转换成类别呈现更有意义,同时能使算法减少噪声的干扰,通过将一定范围内的数值划分成确定的块。举个例子,我们预测一个人是否拥有某款衣服,这里年龄是一个确切的因子。其实年龄组是更为相关的因子,所以我们可以将年龄分布划分成1-10,11-18,19-25,26-40等年龄段,分别表示 幼儿,青少年,青年,中年四个年龄组,让相近的年龄组表现出相似的属性。此外,我们还可以对分箱,分区做一些统计量字段作为数据的特征。

只有在了解属性的领域知识的基础,确定属性能够划分成简洁的范围时分区才有意义。即所有的数值落入一个分区时能够呈现出共同的特征。在实际应用中,当你不想让你的模型总是尝试区分值之间是否太近时,分区能够避免出现过拟合。例如,如果你所感兴趣的是将一个城市作为整体,这时你可以将所有落入该城市的维度值进行整合成一个整体。分箱也能减小小错误的影响,通过将一个给定值划入到最近的块中。如果划分范围的数量和所有可能值相近,或对你来说准确率很重要的话,此时分箱就不适合了。

交叉特征
交叉特征是特征工程中重要的方法之一,交叉特征是一种很独特的方式,它将两个或更多的类别属性组合成一个。当组合的特征要比单个特征更好时,这是一项非常有用的技术。数学上来说,是对类别特征的所有可能值进行交叉相乘。当然我们不仅仅会去查找交叉项关系,还可以去寻找更加复杂的二次项,三次项乃至更复杂的关系,这根据问题求解的需要决定。

经度与纬度的组合便是交叉特征的应用实例,一个相同的经度对应了地图上很多的地方,纬度也是一样。但是一旦你将经度和纬度组合到一起,它们就代表了地理上特定的一块区域,区域中每一部分是拥有着类似的特性。

特征提取

原始数据常常是高维的,其中包含了许多冗余信息或者十分稀疏或者计算量大,拿原始数据来训练是可行的,但是往往直接训练是低效的。所以特征提取往往是必要的。

特征提取主要是为了解决下面三个问题:

(1)原始数据特征中的强相关性造成的冗余信息。
(2)原始数据十分稀疏。
(3)原始数据维度巨大。

特征提取的对象是原始数据(raw data),它的目的是自动地构建新的特征,将原始特征转换为一组具有明显物理意义(Gabor、几何特征[角点、不变量]、纹理[LBP HOG])或者统计意义或核的特征。比如通过变换特征取值来减少原始数据中某个特征的取值个数等。对于表格数据,你可以在你设计的特征矩阵上使用主要成分分析来进行特征提取从而创建新的特征。对于图像数据,可能还包括了线或边缘检测。

常见的一些特征提取的方法:

PCA主成分分析
LDA线性判别分析
ICA独立成分分析

特征选择

特征选择目的是从特征集合中挑选一组最具统计意义的特征子集,从而达到降维的效果。特征选择是剔除不相关或者冗余的特征,减少有效特征的个数,减少模型训练的时间,提高模型的精确度。特征提取通过特征转换实现降维,特征选择则是依靠统计学方法或者于机器学习模型本身的特征选择(排序)功能实现降维。特征选择是个重复迭代的过程,有时可能自己认为特征选择做的很好,但实际中模型训练并不太好,所以每次特征选择都要使用模型去验证,最终目的是为了获得能训练出好的模型的数据,提升模型的性能。

特征选择过程一般包括产生过程,评价函数,停止准则,验证过程,这4个部分。如下图所示:
在这里插入图片描述

(1) 产生过程( Generation Procedure ):产生过程是搜索特征子集的过程,负责为评价函数提供特征子集。
(2) 评价函数( Evaluation Function ):评价函数是评价一个特征子集好坏程度的一个准则。
(3) 停止准则( Stopping Criterion ):停止准则是与评价函数相关的,一般是一个阈值,当评价函数值达到这个阈值后就可停止搜索。
(4) 验证过程( Validation Procedure ) :在验证数据集上验证选出来的特征子集的有效性。

通常来说,从两个方面考虑来选择特征:

特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。
特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。

根据特征选择的形式又可以将特征选择方法分为3种:

Filter:过滤法,侧重于单个特征,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
Wrapper:包装法,侧重于特征子集,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

Filter

过滤法一般使用评价准则来选择特征,从训练数据中选择全部特征向量空间,并在此空间内进行过滤、搜索,得到在阈值范围内的特征,确定最后的特征子集,放入机器学习算法中进行建模。

评价标准函数分为四类:距离度量、信息度量、依赖性度量和一致性度量。与特定的学习算法无关,所以具有良好的通用性。常用的评价标准有:方差、相关系数、卡方检验、互信息和最大信息系数。

①方差

方差即衡量随机变量和其数学期望之间的偏离程度,其公式如下:
σ 2 = ∑ ( X − μ ) 2 N σ^2=∑\frac{(X−μ)^2}{N} σ2=N(Xμ)2
其中 σ 2 \sigma^2 σ2为总样本方差, X X X为变量, μ \mu μ为总样本均值, N N N为总样本数量

在特征选择中,可以默认去除方差没有达到定制标准的特征。因为如果方差很小,证明此维特征的差异性很小,则对最后结果的区分性也不是很大。

②相关系数

Pearson相关系数衡量线性相关、Spearman相关系数衡量曲线相关、Kendall相关系数衡量两个变量观测排序的一致性。对于相关和不相关,在阈值设定上是有非常大的主观性的。
Pearson相关系数的值介于-1到1之间,1 表示变量完全正相关,0 表示无关,-1 表示完全负相关。计算公式:
r = 1 n − 1 ∑ i = 1 n ( X i − X ˉ S X ) ( Y i − Y ˉ S Y ) r = \frac{1}{n-1}\sum_{i=1}^{n}{(\frac{X_i-\bar{X}}{S_X})(\frac{Y_i-\bar{Y}}{S_Y})} r=n11i=1n(SXXiXˉ)(SYYiYˉ)
其中 X ˉ , Y ˉ \bar{X},\bar{Y} Xˉ,Yˉ为样本 X , Y X,Y X,Y的平均值, S X , S Y S_X,S_Y SX,SY为样本 X , Y X,Y X,Y的标准差

注意:皮尔逊相关系数只对线性的特征敏感,如果关系是非线性的,即便是两个变量有很强的一一对应关系,pearson相关系数也有可能接近0。这种情况用spearman秩相关系数则能很好的表示出这种非线性的相关性。

③卡方检验

卡方检验是检验定性自变量和定性因变量的相关性。在检验时,先做一个假设,假设两个变量是独立的;然后根据此假设计算独立时应该的理论值;计算实际值与理论值之间的差异,从而推翻假设或者服从假设。当应用在特征选择中,不关心具体的值,所以也就不存在推翻不推翻原假设,只关心大小,然后排序。
χ 2 = ∑ ( A − E ) 2 E \chi^2 = \sum\frac{(A-E)^2}{E} χ2=E(AE)2
④互信息和最大信息系数

互信息表示随机变量中包含另个一随机变量的信息量,例如两个随机变量(X,Y),互信息是联合分布与乘积分布的相对熵:
I ( X , Y ) = ∑ p ( x , y ) log ⁡ ( p ( x , y ) p ( x ) p ( y ) ) I(X,Y)=\sum p(x,y)\log(\frac{p(x,y)}{p(x)p(y)}) I(XY)=p(x,y)log(p(x)p(y)p(x,y))

Wrapper

此类方法是以分类器的目标函数,即利用学习算法的性能来评价特征子集的优劣。其实可以理解为以最终模型结果驱动来选择特征子集,这里也用到了在搜索中的分类方法,通过不同的搜索方法,选择若干候选特征子集,放入模型进行实验,多次实验选择使得模型得到较优结果的特征集合作为最终的特征子集。所以,对于一个待评价的特征子集,这种方法需要训练一个分类器,根据分类器的性能对该特征子集进行评价,从而进行特征选择和特征排除,最终选择特征子集,然后使用此分类器和特征子集进行建模。

Wrapper方法比Filter方法慢,但是此类方法得到的特征子集性能通常更好,但是通用性不强,改变学习算法时,需要针对特定的学习算法按照相应的指标重新选择特征子集,而且要重新训练和测试,所以对于这类方法通常计算复杂度挺高。其实每选择一次特征子集,就相当于进行了从头到尾的一次实验过程,个人认为这种是结果驱动的选择,换了训练的数据集都可能导致之前选择的特征子集失效。

Embedded

特征选择本身是作为学习算法的一部分,是一种集成的方法,先使用某种学习算法进行训练,然后得到各个特征的权值系数,根据系数的大小对特征进行选择。类似于Filter方法,但是要经过模型训练才能得到相应的特征权重值。例如决策树算法(ID3、C4.5、C5、CART)使用了信息增益、信息增益比、Gini系数等指标,在每一层树增长的过程中,都需要进行特征选择。线性回归算法中,通过训练得到每个特征值的权重,可以根据权重选择特征,重新训练。L1范数正则化,通过在成本或者损失函数中添加L1范数,是的学习的结果满足稀疏化,从而得到适合的特征。这里要注意的是加入L1范数的惩罚项后,没有选择的特征并不是代表不重要,所以一般结合L2范数来优化处理。若一个特征在L1中的权值为1,选择在L2中权值差别不大且在L1中权值为0的特征构成同类集合,将这一集合中的特征平分L1中的权值,故需要构建一个新的逻辑回归模型。

在求解的过程中,我们往往要在平方误差项与正则化项之间折中,找出在平方误差等值线和正则化项等值线相交处。从下图中可以看出,采用L1范数的时候,与平方误差等值线的相交处经常出现在坐标轴上,也就是说得到的一些权重值(ω)为0,所以,使用L1范数的时候,我们能得到更稀疏的解[9]。Tibshirani在1996年提出的LASSO(Least Absolute Shrinkage and Selection Operator)回归就是使用L1范数。

局部加权回归模型(LOESS),对于区域样本使用多项式回归(Cleveland W1988)。这类局部回归有极强的适应性,可以有效得到平滑的回归趋势。

Conclusion

特征工程:利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。
特征构建:是原始数据中人工的构建新的特征。
特征提取:自动地构建新的特征,将原始特征转换为一组具有明显物理意义或者统计意义或核的特征。
特征选择:从特征集合中挑选一组最具统计意义的特征子集,从而达到降维的效果。

特征工程是一个超集,它包括特征提取、特征构建和特征选择这三个子模块。在实践当中,每一个子模块都非常重要,忽略不得。根据经验,可以将这三个子模块的重要性进行了一个排名,即:特征构建>特征提取>特征选择。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值