面试中还说不全数据预处理的方法?看这里,总结好的文档统统送给你!

数据预处理的方法主要包括去除唯一属性、处理缺失值、属性编码、数据标准化正则化、特征选择、主成分分析等,这篇文章将会全面地总结数据预处理的基本方法。







一、去除唯一属性

唯一属性通常是一些id属性,这些属性并不能刻画样本自身的分布规律,所以简单地删除这些属性即可。






二、缺失值处理

(一)缺失值的分类

完全随机缺失:指的是数据的缺失是完全随机的;
随机缺失:指的是数据的缺失不是完全随机的,和完全变量有关;
完全不随机缺失:指的是数据的缺失与不完全变量自身的取值相关;缺失值会使得系统丢失了大量的有用信息,系统所表现出来的不确定性更加显著,系统中蕴含的确定性成分更难把握,包含空值的不完全变量会使得挖掘过程陷入混乱。

(二)缺失值处理的三种方法

直接使用含有缺失值的特征;删除含有缺 失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的);缺失值补全。删除含有缺失值的特征:若变量的缺失率较高(大于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),非正态联合分布的变量,在这个假定下仍然可以估计到很接近真实值的结果。
多重插补和贝叶斯估计的思想是一致的,但是多重插补弥补了贝叶斯估计的几个不足。
1)贝叶斯估计以极大似然的方法估计,极大似然的方法要求模型的形式必须准确,如果参数形式不正确,将得到错误的结论,即先验分布将影响后验分布的准确性。而多重插补所依据的是大样本逐渐近似完整的数据的理论,在数据挖掘中的数据量都很大,先验分布将极小的影响结果,所以先验分布的对结果的影响不大。
2)贝叶斯估计仅要求知道未知参数的先验分布,没有利用与参数的关系。而多重插补对参数的联合分布作出了估计,利用了参数间的相互关系。
以上四种插补方法,对于缺失值的类型为随机缺失的插补有很好的效果。两种均值插补方法是最容易实现的,也是以前人们经常使用的,但是它对样本存在极大的干扰,尤其是当插补后的值作为解释变量进行回归时,参数的估计值与真实值的偏差很大。相比较而言,极大似然估计和多重插补是两种比较好的插补方法,与多重插补对比,极大似然缺少不确定成分,所以越来越多的人倾向于使用多值插补方法。

(5)插值法填充

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

(6)模型填充

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

上述内容参考知乎[酒仙美嘉雪]的《数据分析中缺失值的处理方法》,zhuanlan.zhihu.com/p/31,以及CSDN[marsjhao]的《机器学习算法笔记之6:数据预处理》,blog.csdn.net/marsjhao/







三.离群值的处理方法

因为过大或过小的数据可能会影响到分析结果,尤其是在做回归的时候,我们需要对那些离群值进行处理。实际上离群值和极值是有区别的,因为极值不代表异常,但实际处理中这两个所用方法差不多,所以这里也不强行区分了。
处理方法是调整因子值中的离群值至上下限(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)在训练树模型时,树模型对离群点的鲁棒性较高,无信息损失,不影响模型训练效果

该部分内容参考CSCD[董旭阳TonyDong],《绝对中位差Median Absolute Deviation》 blog.csdn.net/horses/ar,知乎[同花顺私募之家]的《【MindGo】数据预处理(上)之离群值处理、标准化》,zhuanlan.zhihu.com/p/33







四.特征编码

(1)分箱—特征二元化/多元化
特征二元化的过程是将数值型的属性转换为布尔值的属性,设定一个阈值作为划分属性值为0和1的分隔点。
(2)独热编码(One-HotEncoding)
独热编码采用N位状态寄存器来对N个可能的取值进行编码,每个状态都由独立的寄存器来表示,并且在任意时刻只有其中一位有效。
独热编码的优点:能够处理非数值属性;在一定程度上扩充了特征;编码后的属性是稀疏的,存在大量的零元分量。






五.数据标准化

数据标准化是将样本的属性缩放到某个指定的范围。

(1)数据标准化的原因

某些算法要求样本具有零均值和单位方差;
需要消除样本不同属性具有不同量级时的影响:①数量级的差异将导致量级较大的属性占据主导地位;②数量级的差异将导致迭代收敛速度减慢;③依赖于样本距离的算法对于数据的数量级非常敏感。
归一化后求优过程范围变小,寻优过程变得平缓,更容易正确收敛到最优解

(2)数据标准化的方法

min-max标准化(归一化):把最大值归为1,最小值归为0/-1,其他值在其中分布。对于每个属性,设minA和maxA分别为属性A的最小值和最大值,将A的一个原始值x通过min-max标准化映射成在区间[0,1]中的值x',其公式为:新数据=(原数据 - 最小值)/(最大值 - 最小值)
z-score标准化(规范化):一般把均值归一化为0,方差归一化1。基于原始数据的均值(mean)和标准差(standarddeviation)进行数据的标准化。将A的原始值x使用z-score标准化到x'。z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。新数据=(原数据- 均值)/ 标准差
正则化:数据正则化是将样本的某个范数(如L1范数)缩放到到位1,正则化的过程是针对单个样本的,对于每个样本将样本缩放到单位范数。
设数据集
对样本首先计算Lp范数:
正则化后的结果为:每个属性值除以其Lp范数:

该部分参考博客园[sherial_zhu]的《数据预处理(方法总结)》,cnblogs.com/sherial/arc;以及CSDN[marsjhao]的《机器学习算法笔记之6:数据预处理》,blog.csdn.net/marsjhao/







六. 特征选择(降维)

从给定的特征集合中选出相关特征子集的过程称为特征选择。
进行特征选择的两个主要原因是:
减轻维数灾难问题;
降低学习任务的难度。
进行特征选择必须确保不丢失重要特征。
常见的特征选择类型分为三类:过滤式(filter)、包裹式(wrapper)、嵌入式(embedding)。
过滤式选择:该方法先对数据集进行特征选择,然后再训练学习器。特征选择过程与后续学习器无关。Relief是一种著名的过滤式特征选择方法。
包裹式选择:该方法直接把最终将要使用的学习器的性能作为特征子集的评价原则。其优点是直接针对特定学习器进行优化,因此通常包裹式特征选择比过滤式特征选择更好,缺点是由于特征选择过程需要多次训练学习器,故计算开销要比过滤式特征选择要大得多。
嵌入式选择
常见的降维方法:SVD、PCA、LDA
SVD参考ttp://blog.csdn.net/u012380663/article/details/36629951
PCA参考blog.csdn.net/u01477286
LAD参考cnblogs.com/pinard/p/62

该部分参考博客园[sherial_zhu]的《数据预处理(方法总结)》,cnblogs.com/sherial/arc







参考链接

https://link.zhihu.com/target=https%3A//moluchase.github.io/2018/08/29/ml07/

https://www.cnblogs.com/sherial/archive/2018/03/07/8522405.html

https://blog.csdn.net/marsjhao/article/details/70213749

https://zhuanlan.zhihu.com/p/31314004

https://blog.csdn.net/pipisorry/article/details/52247379

https://blog.csdn.net/horses/article/details/78749485

https://zhuanlan.zhihu.com/p/33614269

分享 点赞 再看三连



点击查看原文,了解更多资讯

全部评论

相关推荐

秋招进行到现在终于能写总结了。完全没想到战线会拉这么长,过程会如此狼狈,不过更应该怪自己太菜了。好在所有的运气都用在了最后,也是有个去处。背景:双2本硕科班,无竞赛,本科一段研究所实习,硕士一段大厂暑期实习但无转正。技术栈是C++ & Golang,实习是客户端音视频(而且是鸿蒙端开发),简历两个C++项目一个Golang项目。主要投递岗位:后端,cpp软开,游戏服务端,测开,以及一些不拘泥于Java的岗位。从8月起总共投递123家公司,笔试数不清了,约面大约30家。offer/oc/意向:友塔游戏(第一个offer,面试体验很好,就是给钱好少南瑞继保(计算机科班点击就送(限男生),不...
乡土丁真真:佬很厉害,羡慕~虽然我还没有到校招的时候,也想讲一下自己的看法:我觉得不是CPP的问题,佬的背书双2,技术栈加了GO,有两段实习。投了123,面了30.拿到11个offer。这个数据已经很耀眼了。这不也是CPP带来的吗?当然也不止是CPP。至少来说在这个方向努力过的也会有好的结果和选择。同等学历和项目选java就会有更好的吗?我个人持疑问态度。当然CPP在方向选择上确实让人头大,但是我觉得能上岸,至于最后做什么方向,在我看来并不重要。至于CPP特殊,有岗位方向的随机性,java不是不挑方向,只是没得选而已。也希望自己以后校招的时候能offer满满
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
评论
点赞
2
分享
牛客网
牛客企业服务