数据挖掘:特征工程——特征处理与特征构建
这里贴一张网上特征工程的流程,供大家学习。
一、什么是特征工程
特征工程:其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。。就是获取更好的训练数据。主要有两个方面:
- 获取更好的数据
- 使机器学习算法达到最优
二、特征工程处理的意义
有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
- 特征越好,灵活性越强
只要特征选得好,即使是一般的模型(或算法)也能获得很好的性能,因为大多数模型(或算法)在好的数据特征下表现的性能都还不错。好特征的灵活性在于它允许你选择不复杂的模型,同时运行速度也更快,也更容易理解和维护。 - 特征越好,构建的模型越简单
有了好的特征,即便你的参数不是最优的,你的模型性能也依然会表现的很nice,所以你就不需要花太多的时间去寻找最有参数,这大大的降低了模型的复杂度,使模型趋于简单。 - 特征越好,模型的性能越出色
显然,这一点是毫无争议的,我们进行特征工程的最终目的就是提升模型的性能。
三、特征工程处理流程
特征工程处理流程主要包括以下四个方面特征处理,特征生成,特征提取,特征选择。本文主要介绍前两种方法。
四、特征处理与特征构建
在探索性数据分析中,我们已经对数据有了很深的了解,接下来要对数据中的特征进行处理和生成。
特征处理主要对数字,类别,顺序,时间序列,文本等类型数据进行处理,使得数据更适合模型的预测。
特征构建/衍生/生成:是根据对数据的了解,人为定出一些有意义的特征。这部分在之前探索性数据分析中有提到,其实进行EDA的目的就是为了更好地了解数据。
注:特征处理中也包含了特征清洗这一步骤,跟之前的数据预处理是一样的。关于这些没有太过明确的定义,主要学习整个处理数据的流程即可,不用对概念中的处理方式太过纠结。
4.1 数字特征的处理和构建
4.1.1 数据标准化、归一化
在数据挖掘数据处理过程中,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。
数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面。
- 数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果。
- 数据无量纲化处理主要解决数据的可比性。经过上述标准化处理,原始数据均转换为无量纲化指标测评值,即各指标值(各特征)都处于同一个数量级别上,可以进行综合对比分析。
常见的数据标准化处理(这里先统称为数据标准化处理,其实数据标准化,归一化,中心化不一样)有以下四种,可以取消由于量纲不同、自身变异或者数值相差较大所引起的误差。
1.实现中心化和正态分布的Z-score
2.实现归一化的Max-Min
3.用于稀疏矩阵的MaxAbs
4.针对离群点的RobustScaler
sklearn的preprocessing提供了可以满足需求的方法。先用训练集训练标准化的类,然后用训练好的类分别转化训练集和测试集.
中心化:把数据整体移动到以0为中心点的位置。将数据减去这个数据集的平均值。
标准化:把整体的数据的中心移动到0,数据再除以一个数。在数据中心化之后,数据再除以数据集的标准差。
归一化:把数据的最小值移动到0,再除以数据集的最大值。对这个数据集的每一个数减去min,然后除以极差。
中心化、标准化、归一化定义
4.1.1.1 中心化与标准化(归一化)的处理意义
1.提升模型收敛速度
如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)。
2.提升模型精度
这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,如SVM,KNN等。上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。而基于树的模型,可以不进行标准化,例如随机森林,bagging 和 boosting等。以 C4.5 算法为例,决策树在分裂结点时候主要依据数据集 D 关于特征 x 的信息增益比,而信息增益比和特征是否经过归一化是无关的,归一化不会改变样本在特征 x 上的信息增益。
在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。
从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
3. 深度学习中数据归一化可以防止模型梯度爆炸。
通过中心化和标准化处理,最终得到均值为0,标准差为1的服从标准正态分布的数据。可以取消由于量纲不同、自身变异或者数值相差较大所引起的误差。
在一些实际问题中,我们得到的样本数据都是多个维度的,即一个样本是用多个特征来表征的。比如在预测房价的问题中,影响房价的因素(特征)有房子面积、卧室数量等,很显然,这些特征的量纲和数值得量级都是不一样的,在预测房价时,如果直接使用原始的数据值,那么他们对房价的影响程度将是不一样的,而通过标准化处理,可以使得不同的特征具有相同的尺度(Scale)。简言之,当原始数据不同维度上的特征的尺度(单位)不一致时,需要标准化步骤对数据进行预处理。
下图中以二维数据为例:左图表示的是原始数据;中间的是中心化后的数据,数据被移动大原点周围;右图将中心化后的数据除以标准差,得到为标准化的数据,可以看出每个维度上的尺度是一致的(红色线段的长度表示尺度)。
其实,在不同的问题中,中心化和标准化有着不同的意义,比如在训练神经网络的过程中,通过将数据标准化,能够加速权重参数的收敛。对数据进行中心化预处理,这样做的目的是要增加基向量的正交性。
中心化 -PCA示例
下面两幅图是数据做中心化(centering)前后的对比,可以看到其实就是一个平移的过程,平移后所有数据的中心是(0,0)
在做PCA时,我们需要找出矩阵的特征向量,也就是主成分(PC)。比如说找到的第一个特征向量是a = [1, 2],a在坐标平面上就是从原点出发到点 (1,2)的一个向量。
如果没有对数据做中心化,那算出来的第一主成分的方向可能就不是一个可以“描述”(或者说“概括”)数据的方向。
黑色线就是第一主成分的方向。只有中心化数据之后,计算得到的方向才能比较好的“概括”原来的数据。
4.1.1.2 Z-Score
Z-Score:即标准化。它是基于原始数据的均值和标准差,通过减去均值然后除以方差(或标准差),这种数据标准化方法经过处理后数据,符合标准正态分布,即均值为0,标准差为1。转化函数为:x =(x - 𝜇)/𝜎
注:
- 使用最多,处理后的数据均值为0,标准差为1.
- 其使用前提最好是特征值服从正态分布,只有原始数据是正态分布,转换后的数据才是标准正态,不然,即使进行转化,得到的也不是标准正态。
- 另外