数据预处理

数据预处理

  • 1 数据可能存在的问题
  • 2 数据预处理步骤
    • 2.1 数据清洗
      • 2.1.1 缺失值处理
      • 2.1.2 离群点处理
    • 2.2 数据转换

1 数据可能存在的问题

在实际业务处理中,数据通常是脏数据。所谓的脏,指数据可能存在以下几种问题(主要问题):

  1. 数据缺失 (Incomplete) 是属性值为空的情况。如 Occupancy = “ ”

  2. 数据噪声 (Noisy)是数据值不合常理的情况。如 Salary = “-100”

  3. 数据不一致 (Inconsistent)是数据前后存在矛盾的情况。如 Age = “42” vs. Birthday = “01/09/1985”

  4. 数据冗余 (Redundant)是数据量或者属性数目超出数据分析需要的情况。

  5. 数据集不均衡 (Imbalance)是各个类别的数据量相差悬殊的情况。

  6. 离群点/异常值 (Outliers)是远离数据集中其余部分的数据。

  7. 数据重复(Duplicate)是在数据集中出现多次的数据。

2 数据预处理步骤

数据进行预处理主要有以下步骤,第一部分提及的各种脏数据的处理就在这些步骤中完成:

  1. 数据清洗 Data Cleansing

  2. 数据转换 Data Transformation

  3. 数据描述 Data Description

  4. 特征选择 Feature Selection 或特征组合 Feature Combination

  5. 特征抽取 Feature Extraction

2.1 数据清洗

在数据清洗阶段,我们处理第一部分提及的缺失数据、离群点和重复数据。

2.1.1 缺失值处理

缺失数据有以下几类:

a.Missing completely at random: 缺失的概率是随机的,比如门店的计数器因为断电断网等原因在某个时段数据为空。

b.Missing conditionally at random: 数据是否缺失取决于另外一个属性,比如一些女生不愿意填写自己的体重。

c.Not missing at random: 数据缺失与自身的值有关,比如高收入的人可能不愿意填写收入。

处理方式有以下几种:

直接使用含有缺失值的特征;

  1. 删除含有缺失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的);
  2. 缺失值补全。
  3. 删除含有缺失值的特征:若变量的缺失率较高(大于80%),覆盖率较低,且重要性较低,可以直接将变量删除。
  1. 均值插补。数据的属性分为定距型和非定距型。如果缺失值是定距型的,就以该属性存在值的平均值来插补缺失的值;如果缺失值是非定距型的,就根据统计学中的众数原理,用该属性的众数(即出现频率最高的值)来补齐缺失的值。
    Ps : 定距型数据–数据的中间级,用数字表示个体在某个有序状态中所处的位置,不能做四则运算。例如,“受教育程度”,文盲半文盲=1,小学=2,初中=3,高中=4,大学=5,硕士研究生=6,博士及其以上=7。

  2. 利用同类均值插补。同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。假设X=(X1,X2…Xp)为信息完全的变量,Y为存在缺失值的变量,那么首先对X或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。如果在以后统计分析中还需以引入的解释变量和Y做分析,那么这种插补方法将在模型中引入自相关,给分析造成障碍。

  3. 极大似然估计(Max Likelihood ,ML)。在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

  4. 多重插补(Multiple Imputation,MI)。多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。
    多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。
    假设一组数据,包括三个变量Y1,Y2,Y3,它们的联合分布为正态分布,将这组数据处理成三组,A组保持原始数据,B组仅缺失Y3,C组缺失Y1和Y2。在多值插补时,对A组将不进行任何处理,对B组产生Y3的一组估计值(作Y3关于Y1,Y2的回归),对C组作产生Y1和Y2的一组成对估计值(作Y1,Y2关于Y3的回归)。
    当用多值插补时,对A组将不进行处理,对B、C组将完整的样本随机抽取形成为m组(m为可选择的m组插补值),每组个案数只要能够有效估计参数就可以了。对存在缺失值的属性的分布作出估计,然后基于这m组观测值,对于这m组样本分别产生关于参数的m组估计值,给出相应的预测即,这时采用的估计方法为极大似然法,在计算机中具体的实现算法为期望最大化法(EM)。对B组估计出一组Y3的值,对C将利用 Y1,Y2,Y3它们的联合分布为正态分布这一前提,估计出一组(Y1,Y2)。
    上例中假定了Y1,Y2,Y3的联合分布为正态分布。这个假设是人为的,但是已经通过验证(Graham和Schafer于1999),非正态联合分布的变量,在这个假定下仍然可以估计到很接近真实值的结果。
    多重插补和贝叶斯估计的思想是一致的,但是多重插补弥补了贝叶斯估计的几个不足。
    a 贝叶斯估计以极大似然的方法估计,极大似然的方法要求模型的形式必须准确,如果参数形式不正确,将得到错误得结论,即先验分布将影响后验分布的准确性。而多重插补所依据的是大样本渐近完整的数据的理论,在数据挖掘中的数据量都很大,先验分布将极小的影响结果,所以先验分布的对结果的影响不大。
    b 贝叶斯估计仅要求知道未知参数的先验分布,没有利用与参数的关系。而多重插补对参数的联合分布作出了估计,利用了参数间的相互关系。
    以上四种插补方法,对于缺失值的类型为随机缺失的插补有很好的效果。两种均值插补方法是最容易实现的,也是以前人们经常使用的,但是它对样本存在极大的干扰,尤其是当插补后的值作为解释变量进行回归时,参数的估计值与真实值的偏差很大。相比较而言,极大似然估计和多重插补是两种比较好的插补方法,与多重插补对比,极大似然缺少不确定成分,所以越来越多的人倾向于使用多值插补方法。

  5. 插值法填充
    包括随机插值,多重差补法,热平台插补,拉格朗日插值,牛顿插值等

  6. 模型填充

使用回归、贝叶斯、随机森林、决策树等模型对缺失数据进行预测。

2.1.2 离群点处理

因为过大或过小的数据可能会影响到分析结果,尤其是在做回归的时候,我们需要对那些离群值进行处理。实际上离群值和极值是有区别的,因为极值不代表异常,但实际处理中这两个所用方法差不多,所以这里也不强行区分了。
处理方法是调整因子值中的离群值至上下限(Winsorzation处理),其中上下限由离群值判断的标准给出,从而减小离群值的影响力。离群值的判断标准有三种,分别为 MAD、 3σ、百分位法。

  1. MAD法
    MAD又称为绝对值差中位数法(Median Absolute Deviation)。MAD 是一种先需计算所有因子与平均值之间的距离总和来检测离群值的方法。
    处理的逻辑:第一步,找出所有因子的中位数 Xmedian;第二步,得到每个因子与中位数的绝对偏差值 Xi−Xmedian;第三步,得到绝对偏差值的中位数 MAD;最后,确定参数 n,从而确定合理的范围为 [Xmedian−nMAD,Xmedian+nMAD],并针对超出合理范围的因子值做调整 。

  2. 3σ法
    又称为标准差法。标准差本身可以体现因子的离散程度,是基于因子的平均值 Xmean而定的。在离群值处理过程中,可通过用 Xmean±nσ来衡量因子与平均值的距离。标准差法处理的逻辑与MAD法类似,首先计算出因子的平均值与标准差,其次确认参数 n,从而确认因子值的合理范围为 [Xmean−nσ,Xmean+nσ],并对因子值作的调整。
    Ps: 3σ原则简介
    先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除就得出3σ。
    在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴。
    3σ:数值分布在(μ-σ,μ+σ)中的概率为0.6826;
    数值分布在(μ-2σ,μ+2σ)中的概率为0.9544;
    数值分布在(μ-3σ,μ+3σ)中的概率为0.9974;
    可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)]区间内,超出这个范围的可能性仅占不到0.3%。
    3σ准建立在正态分布的等精度重复测量基础上,造成奇异数据的干扰或噪声难以满足正态分布。如果一组测量数据中某个测量值的残余误差的绝对值 νi>3σ,则该测量值为坏值,应剔除。
    通常把等于 ±3σ的误差作为极限误差,对于正态分布的随机误差,落在 ±3σ以外的概率只有 0.27%,它在测量中发生的可能性很小,故存在3σ准则。
    3σ准则是最常用也是最简单的粗大误差判别准则,它一般应用于测量次数充分多( n ≥30)或当 n>10做判别时的情况。

  3. 百分位法
    计算的逻辑是将因子值进行升序的排序,对排位百分位高于97.5%或排位百分位低于2.5%的因子值,进行类似于 MAD 、 3σ 的方法进行调整。

  4. 基于距离
    通过定义对象之间的临近性度量,根据距离判断异常对象是否远离其他对象,缺点是计算复杂度较高,不适用于大数据集和存在不同密度区域的数据集。

  5. 基于密度
    离群点的局部密度显著低于大部分近邻点,适用于非均匀的数据集。

  6. 基于聚类
    利用聚类算法,丢弃远离其他簇的小簇。
    总结来看,在数据处理阶段将离群点作为影响数据质量的异常点考虑,而不是作为通常所说的异常检测目标点,因而楼主一般采用较为简单直观的方法,结合箱线图和MAD的统计方法判断变量的离群点。
    异常值的处理方法
    (1)根据异常点的数量和影响,考虑是否将该条记录删除,信息损失多
    (2)若对数据做了log-scale 对数变换后消除了异常值,则此方法生效,且不损失信息
    (3)平均值或中位数替代异常点,简单高效,信息的损失较少
    (4)在训练树模型时,树模型对离群点的鲁棒性较高,无信息损失,不影响模型训练效果

不论是对离群点提出还是重点研究应用,我们首先需要检测出离群点。在sklearn(一个python机器学习包)中提供了多种方法,如OneClassSVM、Isolation Forest、Local Outlier Factor (LOF)。需要进一步了解原理的可以额外看些资料。这里就不展开了。

对重复数据的处理如下:如果高度疑似的样本是挨着的,就可以用滑动窗口对比,为了让相似记录相邻,可以每条记录生成一个hash key, 根据key去排序。

2.2 数据转换

在数据转换阶段,我们对数据进行采样处理、类型转换、归一化。

采样是从特定的概率分布中抽取样本点的过程。采样在机器学习中有非常重要的应用:将复杂分布简化为离散的样本点;用重采样可以对样本集进行调整以更好地进行调整并适应后期的模型学习;用于随机模拟以进行复杂模型的近似求解或推理。采样的一个重要作用是处理不均衡数据集。

最简单的处理不均衡样本集的方法是随机采样。采样一般分为过采样(Over-sampling)欠采样(Under-sampling)。随机过采样是从少数类样本集 S_min中有放回地随机重复抽取样本,随机欠采样是从多数类样本集S_max中随机选取较少样本。两种方法也存在问题,如随机过采样会扩大数据规模,容易造成过拟合;随机欠采样可能损失部分有用信息,造成欠拟合。为了解决上诉问题,通常在随机过采样时不是简单复制样本,而是采取一定方法生成新的样本。如使用SMOTE(Synthetic Minority Oversampling Technique)算法、Borderline-SMOTE、ADASYN等算法。对于欠采样,可以采用Informed Undersampling来解决数据丢失问题。

PS:当总体数据量不够时,除了简化模型,我们可以借鉴随机过采样的方法,对每个类进行过采样。具体到图像任务,还可以直接在图像空间进行变换,如可以通过对图像施加一定幅度的变换(旋转、平移、缩放、裁剪、填充、翻转、添加噪声、颜色变换、改变亮度、清晰度、对比度等),得到扩充的数据集。此外,迁移学习也是在小数据集上进行建模的好方法。

PS:整体准确率不适用于不平衡数据集,需要引入新的度量模式比如G-mean, 它会看正类上的准确率,再看负类上的准确率,然后两者相乘取平方根。另外一种常见的度量如F-score。

在类型转换处理前,我们先来看下数据的类型。

数据类型可以简单划分为数值型和非数值型。数值型有连续型和离散型。非数值型有类别型和非类别型,其中类别型特征中如果类别存在排序问题为定序型,若不存在排序问题则为定类型,非类别型是字符串型。如下所示:

连续型 Continuous
Real values: Temperature, Height, Weight …

  1. 离散型 Discrete

Integer values: Number of people …

  1. 定序型 Ordinal

Rankings: {Average, Good, Best}, {Low, Medium, High} …

  1. 定类型 Nominal

Symbols: {Teacher, Worker, Salesman}, {Red, Green, Blue} …

  1. 字符串型 String

Text: “Tsinghua University”, “No. 123, Pingan Avenue” …

对于非数值型,我们需要进行类别转换,即将非数值型转换为数值型,以方便机器学习算法后续处理。

对于定序型,我们可以使用序号编码,如成绩,分为Average, Good, Best三档,序号编码可以按照大小关系对定序型特征赋予一个数值ID,例如Average表示为1,Good表示为2,Best表示为3,转换后依旧保留了大小关系。

对于定类型,我们可以使用独热编码,如颜色三原色,为Red, Green, Blue,独热编码可以把三原色变为一个三维稀疏向量,Red表示为(0,0,1),Green表示为(0,1,0),Blue表示为(1,0,0)。需要注意的是,在类别值较多的情况下,可以使用稀疏向量来节省空间,目前大部分算法实现均接受稀疏向量形式的输入。当然还有很多别的编码方式,如二进制编码等,感兴趣的可以额外查阅资料了解。

对于字符串型,我们有多种表示方式,如词袋模型(Bag of Words),TF-IDF(Term Frequency-Inverse),主题模型(Topic Model),词嵌入模型(Word Embedding)。各种表示有不同的适用场景和优缺点,需要进一步了解的可以额外查资料。

经过类别转换后,我们所有的数据均转为了数值型。为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使不同指标之间具有可比性。例如,分析一个人的身高和体重对健康的影响,如果使用米(m)和千克(kg)作为单位,身高在1.6-1.8m的数值范围内,体重特征在50-100kg的数值范围内,分析出来的结果会倾向于数值差别较大的体重特征。对数值型特征进行归一化可以将所有特征都统一到一个大致相同的区间内,以便进行分析。归一化方式通常有线性函数归一化(Min-Max Scaling)和零均值归一化(Z-score Normalization)。当然,不是所有的机器学习算法需要对数值进行归一化,在实际应用中,通过梯度下降法求解的模型通常需要归一化,因为经过归一化后,梯度在不同特征上更新速度趋于一致,可以加快模型收敛速度。而决策树模型并不需要,以C4.5为例,决策树在节点分裂时主要依据数据集D关于特征x的信息增益比,而信息增益比跟特征是否经过归一化是无关的。

References

  1. https://zhuanlan.zhihu.com/p/87792056
  2. https://zhuanlan.zhihu.com/p/100442371

你可能感兴趣的:(机器学习,机器学习,数据分析,人工智能,python)