基础概念
特征工程是通过对原始数据的处理和加工,将原始数据属性通过处理转换为数据特征的过程,属性是数据本身具有的维度,特征是数据中所呈现出来的某一种重要的特性,通常是通过属性的计算,组合或转换得到的。比如主成分分析就是将大量的数据属性转换为少数几个特征的过程。某种程度而言,好的数据以及特征往往是一个性能优秀模型的基础。
既然叫特征工程,自然涵盖了很多内容,而其中涉及到的比较重要的部分是特征的处理及选择。
特征处理包含:
- 数据清洗
- 数据规范化
- 特征构造与衍生
特征选择包含:
- 特征过滤
- wrapper method
- embedded method
数据清洗
数据清洗是指发现并纠正数据文件中可识别的错误以及通过处理得到建模过程需要数据的过程。
数据清洗包含:
- 缺失值处理
- 异常值检测与处理
- 调配样本比例和权重
缺失值处理
缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。
缺失值的处理目前主要有两种方法:删除缺失值和填充缺失值
1.删除缺失值
如果一个样本或变量中所包含的缺失值超过一定的比例,比如超过样本或变量的一半,此时这个样本或变量所含有的信息是有限的,如果我们强行对数据进行填充处理,可能会加入过大的人工信息,导致建模效果打折扣,这种情况下,我们一般选择从数据中剔除整个样本或变量,即删除缺失值。
2.缺失值填充
-
随机填充法
从字面上理解就是找一个随机数,对缺失值进行填充,这种方法没有考虑任何的数据特性,填充后可能还是会出现异常值等情况,一般情况下不建议使用。
-
均值填充法
寻找与缺失值变量相关性最大的那个变量把数据分成几个组,然后分别计算每个组的均值,然后把均值填入缺失的位置作为它的值,如果找不到相关性较好的变量,也可以统计变量已有数据的均值,然后把它填入缺失位置。这种方法会在一定程度上改变数据的分布。
-
最相似填充法
在数据集中找到一个与它最相似的样本,然后用这个样本的值对缺失值进行填充。
与均值填充法有点类似,寻找与缺失值变量(比如x)相关性最大的那个变量(比如y),然后按照变量y的值进行排序,然后得到相应的x的排序,最后用缺失值所在位置的前一个值来代替缺失值。
-
回归填充法
把缺失值变量作为一个目标变量y,把缺失值变量已有部分数据作为训练集,寻找与其高度相关的变量x建立回归方程,然后把缺失值变量y所在位置对应的x作为预测集,对缺失进行预测,用预测结果来代替缺失值。
-
k近邻填充法
利用knn算法,选择缺失值的最近k个近邻点,然后根据缺失值所在的点离这几个点距离的远近进行加权平均来估计缺失值。
异常值检测与处理
异常值(outlier)是指一组测定值中与平均值的偏差超过两倍标准差的测定值,与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值。异常值的产生一般由系统误差、人为误差或数据本身的变异引起的。
-
单变量异常值检测(格拉布斯法)
首先,将变量按照其值从小到大进行顺序排列x1,x2.....xn
其次,计算平均值x拔和标准差S,
同时计算偏离值,即平均值与最大值之差和平均值与最小值之差,然后确定一个可疑值,一般是偏离平均值较大的那个。
计算统计量gi(残差与标准差的比值),i为可疑值的序列号。
再者,将gi与格拉布斯表给出的临界值GP(n)比较,如果计算的Gi值大于表中的临界值GP(n),则能判断该测量数据是异常值,可以剔除。这里临界值GP(n)与两个参数有关:检出水平α和测量次数n 。
检出水平α:如果要求严格,检出水平α可以定得小一些,例如定α=0.01,那么置信概率P=1-α=0.99;如果要求不严格,α可以定得大一些,例如定α=0.10,即P=0.90;通常定α=0.05,P=0.95。
-
多变量异常值检测(基于距离计算)
基于距离的多变量异常值检测类似与k近邻算法的思路,一般的思路是计算各样本点到中心点的距离,如果距离太大,则判断为异常值,这里距离的度量一般使用马氏距离(Mahalanobis Distance)。因为马氏距离不受量纲的影响,而且在多元条件下,马氏距离还考虑了变量之间的相关性,这使得它优于欧氏距离。
-
异常值处理
单变量的情况下异常值可以考虑类似缺失值的删除法、均值填充法或回归填充法,而多变量的情况下,可以尝试用均值向量填充或者删除。
总的来说,缺失值和异常值的处理要根据实际的情况确定合适的方法,因为某些情况下异常值刚好能够反应一些现实问题。
调配样本比例和权重
当数据集中出现样本不均衡情况时,需要调配样本的比例以及权重,以便能够训练出性能更优的模型,具体方法参考上一篇文章:机器学习中的类别不均衡问题
http://www.cnblogs.com/wkslearner/p/8870673.html
数据规范化
在机器学习中,由于不同模型的需要,我们经常要多数据做不同的规范化处理,以便能够得到性能更优的模型。
在数据处理中,经常会接触到的数据规范化操作有:
- 数据无量纲化
- 连续变量离散化
- 离散变量量化处理
- 数据转换
数据无量纲化
无量纲化使不同规格的数据转换到同一规格,在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。
数据无量纲化常用方法有:
- 标准化方法
- 极值化方法
- 均值化方法
- 标准差化方法
1.标准化方法
标准化方法是将变量的每个值与其平均值之差除以该变量的标准差,无量纲化后变量的平均值为0,标准差为1。使用该方法无量纲化后不同变量间的均值和标准差都相同,即同时消除了变量间变异程度上的差异。
标准化公式为:
2.极值化方法
极值化方法通常是通过变量取值的最大值和最小值将原始数据转换为特定范围内的数据,从而消除量纲和数量级的影响。这种方法十分依赖两个极端值。
通常情况下极值化方法有3种方式:
第一种方法,是将变量的值除以该变量的全距,标准化后每个变量的取值范围在[-1,1]。
公式为:
第二种方法,是将变量值与最小值之差除以该变量的全距,标准化后取值范围在[0,1]。
公式为:
第三种方法,是将变量值除以该变量的最大值,标准化后变量的最大取值为1。
公式为:
3.均值化方法
均值化方法是将变量值直接除以该变量的平均值,跟标准化方法不同的是,均值化方法能够保留变量间取值差异程度的信息。
均值化方法公式:
4.标准差化方法
标准差化方法是标准化方法的一种变形,标准差化方法是直接将变量值除以标准差,而不是减去均值后再除以标准差。标准差化方法无量纲化后变量的均值为原始变量均值与标准差的比值,而不是0。
公式为:
连续变量离散化
在使用某些算法时,我们需要把连续变量转换为离散变量,在一些情况下离散变量能够简化模型计算同时能够提升模型的稳定性,比如逻辑回归经常使用离散后的变量进行训练,能够体现模型的训练速度以及提升模型的可解释性。
连续变量离散化大致有两类方法:
- 卡方检验方法
- 信息增益方法
1.卡方检验方法
通常情况下,将变量按照值大小进行排列,将每个值作为一个组,然后对每一对相邻的组计算卡方值,对其中最小的一对组合进行合并,接下来不断重复以上操作,直到满足我们设定的某一个条件,比如最小分组数5,即将连续变量分为5组。
卡方统计量是指数据的分布与所选择的预期或假设分布之间的差异的度量。它是由各项实际观测次数(fo )与理论分布次数(fe )之差的平方除以理论次数,然后再求和而得出的,其计算公式为:
卡方值包含两个信息:
- 实际值与理论值偏差的绝对大小。
- 差异程度与理论值的相对大小。
2.信息增益方法
信息增益方法是使用信息计算确定分割点的自上而下的分裂技术。
首先是把每个值看成分割点,将数据分成两个部分,在多种可能的分法中选择产生最小信息熵的分法。然后在分成的两个区间中,寻找最大熵区间,继续进行按前面的方法进行分割,直到满足条件为止,比如满足指定个数时结束过程。
数据的信息属性是与任务相关的,对于分类任务, 标签值y包含的信息量为:
其中, p(y)为y出现的概率. p(y)越小, y包含的信息量越大. 这是符合直觉的.
熵定义为信息的期望值.
一个可以分为m类的数据集S, 它的信息熵为随机得到的一个label包含的信息量的期望值:
数据集的信息熵代表这个数据集的混乱程度. 熵越大, 越混乱.
若按照某种特定的方式, 例如按照某一属性的值对S进行划分, 得到n个子集。新的子集们都有自己的信息熵, 它们的熵的和与原S的熵的差值就是这个划分操作带来的信息熵增益.
未完待续.....
原文地址:https://www.cnblogs.com/wkslearner/p/8933685.html