拿到数据后是先进行数据异常值处理理还是先进行正太性检验

君,已阅读到文档的结尾了呢~~
Matlab学习系列,语法+代码实例+运行结果
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
12. 数据预处理—剔除异常值,平滑处理,标准化(归一化)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口异常值(outlier)的判别与剔除 - CSDN博客
异常值(outlier)的判别与剔除
在处理实验数据的时候,我们常常会遇到个别数据值偏离预期或大量统计数据值结果的情况,如果我们把这些数据值和正常数据值放在一起进行统计,可能会影响实验结果的正确性,如果把这些数据值简单地剔除,又可能忽略了重要的实验信息。这里重要的问题是如何判断异常值,然后将其剔除。判断和剔除异常值是数据处理中的一项重要任务,目前的一些方法还不是十分完善,有待进一步研究和探索。
异常值outlier:指样本中的个别值,其数值明显偏离它(或他们)所属样本的其余观测值,也称异常数据,离群值。
目前人们对异常值的判别与剔除主要采用物理判别法和统计判别法两种方法。
所谓物理判别法就是根据人们对客观事物已有的认识,判别由于外界干扰、人为误差等原因造成实测数据值偏离正常结果,在实验过程中随时判断,随时剔除。
统计判别法是给定一个置信概率,并确定一个置信限,凡超过此限的误差,就认为它不属于随机误差范围,将其视为异常值剔除。当物理识别不易判断时,一般采用统计识别法。
对于多次重复测定的数据值,异常值常用的统计识别与剔除法有:
拉依达准则法(3δ):简单,无需查表。测量次数较多或要求不高时用。是最常用的异常值判定与剔除准则。但当测量次数《=10次时,该准则失效。
如果实验数据值的总体x是服从正态分布的,则
异常值(outlier)的判别与剔除(rejection)
式中,μ与σ分别表示正态总体的数学期望和标准差。此时,在实验数据值中出现大于μ+3σ或小于μ—3σ数据值的概率是很小的。因此,根据上式对于大于μ+3σ或小于μ—3σ的实验数据值作为异常值,予以剔除。具体计算方法参见http://202.121.199.249/foundrymate/lessons/data-analysis/13/131.htm
在这种情况下,异常值是指一组测定值中与平均值的偏差超过两倍标准差的测定值。与平均值的偏差超过三倍标准差的测定值,称为高度异常的异常值。在处理数据时,应剔除高度异常的异常值。异常值是否剔除,视具体情况而定。在统计检验时,指定为检出异常值的显著性水平α=0.05,称为检出水平;指定为检出高度异常的异常值的显著性水平α=0.01,称为舍弃水平,又称剔除水平(reject level)。
标准化数值(Z-score)可用来帮助识别异常值。Z分数标准化后的数据服从正态分布。因此,应用Z分数可识别异常值。我们建议将Z分数低于-3或高于3的数据看成是异常值。这些数据的准确性要复查,以决定它是否属于该数据集。
肖维勒准则法(Chauvenet):经典方法,改善了拉依达准则,过去应用较多,但它没有固定的概率意义,特别是当测量数据值n无穷大时失效。
狄克逊准则法(Dixon):对数据值中只存在一个异常值时,效果良好。担当异常值不止一个且出现在同侧时,检验效果不好。尤其同侧的异常值较接近时效果更差,易遭受到屏蔽效应。
罗马诺夫斯基(t检验)准则法:计算较为复杂。
格拉布斯准则法(Grubbs):和狄克逊法均给出了严格的结果,但存在狄克逊法同样的缺陷。朱宏等人采用数据值的中位数取代平均值,改进得到了更为稳健的处理方法。有效消除了同侧异常值的屏蔽效应。国际上常推荐采用格拉布斯准则法。
本文已收录于以下专栏:
相关文章推荐
SAS中对于类别变量(离散)分布观察用proc freq,对于连续变量则用proc univariate来完成。
识别连续型变量的异常值通常称为盒形图,一般采用
proc univariate d...
数据分析之
– 离群值(Outliers)
一:什么是Outliers
Outliers是统计学专业术语,是指相比一组数据中的其它数据的极限值
二:极限值意味什么
1. 决定...
什么是异常(outlier)?Hawkins(1980)给出了异常的本质性的定义:异常是在数据集中与众不同的数据,使人怀疑这些数据并非随机偏差,而是产生于完全不同的机制。聚类算法对异常的定义:异常是聚...
第一次发表博客,先发一个简单的算法吧,原理很简单,和大家分享一下。
最近在做一个项目(android端),需要剔除异常数据,就是根据之前一组数据判断新来的数据是否为合理数据,在相差过大的时候予以剔除...
爱数据点评:
在数据挖掘中,数据预处理占据了数据挖掘大数据的时间。同时数据预处理过程的好坏,也直接决定了后续数据挖掘模型的预测效果和实用性。这其中很重要一个方面是对于异常数据的识别,因为异常数据...
怎样检测和应对数据集的Outliers什么是OutlierOutlier中文可以叫做异常样本,但是一般还是直接称呼Outlier,它就是大量观测样本中那些量较少的、偏离整体的模式样本,这些样本很容易就...
import java.util.HashM
import java.util.L
import java.util.M
//格拉布斯准则
1.在SPSS中做箱型图,图中可以显示异常值,然后剔除。但问题是大数据,采用箱形图已经不显示了
2.拉依达准则法(3δ):简单,无需查表。测量次数较多或要求不高时用。是最常用的异常值判定与剔除准则。...
格拉布斯法—异常值判断 ▲概述:一组测量数据中,如果个别数据偏离平均值很远,那么这个(这些)数据称作“可疑值”。如果用统计方法—例如格拉布斯(Grubbs)法判断,能将“可疑值”从此组测量数据中剔除而...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
统计数据中异常值的检验方法
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口一直想把数据预处理的逻辑给理清楚点,在这里和大家一起分享。
一:缺失值的处理
删除缺失值
这是一种很常用的策略。
缺点:如果缺失值太多,最终删除到没有什么数据了。那就不好办了。
2.2 缺失值的填补
&&&&(1)均值法
&&&&&&&&根据缺失值的属性相关系数最大的那个属性把数据分成几个组,然后分别计算每个组的均值,把这些均值放入到缺失的数值里面就可以了。
缺点:改变了数据的分布,还有就是有的优化问题会对方差优化,这样会让对方差优化问题变得不准确。
&&&&(2)随机填补
&&&&&&&&一直感觉这个方法不好,就是随机在那一列属性中找个数填补到缺失值里。
&&&&缺点:不靠谱。
&&&&(3)热卡填补法
&&&&对于一个包含缺失值的变量,热卡填充法的做法是:在数据库中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。最常见的是使用相关系数矩阵来确定哪个变量(如变量Y)与缺失值所在变量(如变量X)最相关。然后把所有变量按Y的取值大小进行排序。那么变量X的缺失值就可以用排在缺失值前的那个个案的数据来代替了。
缺点:太麻烦。与均值替换法相比,利用热卡填充法插补数据后,其变量的标准差与插补前比较接近。但在回归方程中,使用热卡填充法容易使得回归方程的误差增大,参数估计变得不稳定,而且这种方法使用不便,比较耗时。
(4)最近距离决定填补法
假设现在为时间y,前一段时间为时间x,然后根据x的值去把y的值填补好。
缺点:一般就是在时间因素决定不显著的时候,比如一天的气温,一般不会突然降到很低,然后第二天就升的很高。但是对时间影响比较大的,可能就不可以了。
(5)回归填补法
假设我y属相缺失,然后我知道x属性,然后我用回归方法对没有确实的数据进行训练模型,再把这个值得x属性带进去,对这个y属性进行预测,然后填补到缺失处。
缺点:由于是根绝x属性预测y属性,这样会让属性之间的相关性变大。这可能会影响最终模型的训练。
(6)多重填补方法(M-试探法)
它是基于贝叶斯理论的基础上,然后用EM算法来实现对缺失值进行处理的算法。对每一个缺失值都给M个缺失值,这样数据集就会变成M个,然后用相同的方法对这M个样本集进行处理,得到M个处理结果,总和这M个结果,最终得到对目标变量的估计。其实这个方法很简单,就是我尽量多做模型,然后找出最好的,我就叫它M-试探法吧
2.3 基于距离的填补方法
1 k-最近邻法
先根绝欧氏距离和马氏距离函数来确定具有缺失值数据最近的k个元祖,然后将这个k个值加权(权重一般是距离的比值吧)平均来估计缺失值。
有序最近邻法
这个方法是在K-最近邻法的基础上,根据属性的缺失率进行排序,从缺失率最小的进行填补。这样做的好处是讲算法处理后的数据也加入到对新的缺失值的计算中,这样即使丢了很多数据,依然会有很好的效果。在这里需要注意的是,欧式距离不考虑各个变量之间的相关性,这样可能会使缺失值的估计不是最佳的情况,所以一般都是用马氏距离进行最近邻法的计算。
2.4 基于贝叶斯的方法
就是分别将缺失的属性作为预测项,然后根据最简单的贝叶斯方法,对这个预测项进行预测。但是这个方法有一个缺点,就是说不能把之前的预测出来的数据加入到样本集,会丢失一些数据,会影响到预测。所以现在就是对属性值进行重要性排序,然后把重要的先预测出来,在加入新的数据集,再用新的数据集预测第二个重要的属性,这样一直处理到最后为止。
二:平滑噪声数据
暂略(等我下篇文章在总结)
三:探测异常值
首先来说说什么叫异常值。
定义:由于系统误差,人为误差或者固有数据的变异使得他们与总体的行为特征,结构或相关性等不一样,这部分数据称为异常值。
再来说说异常值检测的作用。
应用:异常值检测在数据挖掘中有着重要的意义,比如如果异常值是由于数据本身的变异造成的,那么对他们进行分析,就可以发现隐藏的更深层次的,潜在的,有价值的信息。例如发现金融和保险的欺诈行为,黑客入侵行为,还有就是追寻极低或者极高消费人群的消费行为,然后做出相对应的产品。
那我们如何把异常值检查出来呢?
异常值检测的方法:
3.1 统计学方法对异常值的检测
(1)3σ探测方法
3σ探测方法的思想其实就是来源于切比雪夫不等式。
对于任意ε&0,有:
当时,如果总体为一般总体的时候,统计数据与平均值的离散程度可以由其标准差反映,因此有:。
一般所有数据中,至少有3/4(或75%)的数据位于平均数2个标准差范围内。
所有数据中,至少有8/9(或88.9%)的数据位于平均数3个标准差范围内。
所有数据中,至少有24/25(或96%)的数据位于平均数5个标准差范围内。
所以如果我们一般是把超过三个离散值的数据称之为异常值。这个方法在实际应用中很方便的使用,但是他只有在单个属性的情况下才适用。
(2)散点图
其实就是画图。把所有点都画出来。自然异常点就出来了。形如这样:
是不是这样异常点一下就看出来了?当然这不就是聚类吗。。。聚类我们之后在说,不急,哈哈。
(3)四分位数展布法
首先,我们介绍什么叫四分位数。如下图所示:
把数据按照从小到大排序,其中25%为上四分位用FL表示,75%处为下四分位用FU表示。
计算展布为:
上截断为:
下截断点为:
上面的参数1.5不是绝对的,而是根据经验,但是效果很好哦。我们把异常值定义为小于上截断点,或者大于下截断点的数据称为异常值。
优点:与方差和极差相比,更加不如意受极端值的影响,且处理大规模数据效果很好。
缺点:小规模处理略显粗糙。而且只适合单个属相的检测。
(4)基于分布的异常值检测
本方法是根据统计模型或者数据分布。然后根绝这些模型对样本集中的每个点进行不一致检验的方法。
不一致检验:零假设和备选假设。表示我的数据分布或者概率模型满足H1,但是如果我这个值接受另外的数据模型或者概率分布H2。那么我们就认为这个数据点与总体分布不符合,是一个异常值。
下面介绍几种方法:
1:Grubbs检验
步骤一:先把数据按照从小到大的顺序排列x1,x2…xn。
步骤二:假设我们认为xi为异常点。计算平均值。
步骤三:计算算数平均值和标准差的估计量s。
&&&&&&&&&&&&公式为:
步骤四:计算统计量gi
&&&&&&&&计算公式为:
步骤五:将gi与查Grubbs检验法的临界值表所得的g(a,n)进行比较。如果gi& g(a,n),那么则认为不存在异常值,如果大于,就认为这个点是异常值。
这样异常值被选出来后,重复以上步骤,直到没有异常值为止。
2:Dixon检测方法
步骤一:先把数据按照从小到大的顺序排列x1,x2…xn。
步骤二:当3时候,r大=,r小=,
&&&&&&&&当8时候,r大=,r小=
&&&&&&&&当n时候,r大=,r小=
步骤三:将r大,r小分别与Dixon检验法的临界值表得到的临界值r(a,n)进行比较、如果r大(r小)&r(a,n),可以认为最大(最小)的值为异常值,否则就不是异常值。
3t分布检验方法
将怀疑是异常值的数据选出来,然后根据,然后查t分布临界值得到临界值t(a,n-1)。如果被挑出的数据确实为异常值的话应该满足下式子:。这样异常值就确认了。
上面的一些方法只适用于单维数据。而且还必须确定其数据分布,所以不是太准确。
3.2 基于距离的异常值检测
基于距离的定义:在样本集S中,O是一个异常值,仅当 S中有p部分的距离大于d。可以这样理解:
图中与五角星1距离超过d的有三个点。。。我们就可以说他是异常点,假如阀值是2,现在2五角星的距离超过d的只有五角星一个。所以五角星2不是异常点。当然这个距离的计算还是用到马氏距离。
优缺点:可以多维数据监测,无需估计样本的分布,但是受参数影响严重。
3.3 基于偏离的异常值检测
假设N的数据集,建立数据子集。求出子集间得相异度,然后确定异常值。
较为复杂,计算量大。不建议使用.
3.4 基于分类模型的异常值检测
根据已有的数据,然后建立模型,得到正常的模型的特征库,然后对新来的数据点进行判断。从而认定其是否与整体偏离,如果偏离,那么这个就是异常值。
建立贝叶斯模型
神经网络模型
决策类分类
其实这些和以前介绍的基本方法差不多。
总结:数据预处理是数据挖掘前期最重要的部分,本文对缺失数据及异常值检测进行了总结,具体实现,还得看你在什么样的平台上实现。这里只是提供逻辑上的思考。本花一直认为逻辑正确才能下手做事!。。。逻辑混乱,那么大脑就一直是混沌状态。。。
祝大家元旦快乐!
阅读(...) 评论()在数据挖掘的过程中,数据预处理占到了整个过程的60%
脏数据:指一般不符合要求,以及不能直接进行相应分析的数据
脏数据包括:缺失值、异常值、不一致的值、重复数据及含有特殊符号(如#、?、*)的数据
数据清洗:删除原始数据集中的无关数据、重复数据、平滑噪声数据、处理缺失值、异常值等
缺失值处理:删除记录、数据插补和不处理
主要用到VIM和mice包&
install.packages(c("VIM","mice"))
1.处理缺失值的步骤
(1)识别缺失数据;
(2)检查导致数据缺失的原因;
(3)删除包含缺失值的实例或用合理的数值代替(插补)缺失值
缺失值数据的分类:
(1)完全随机缺失:若某变量的缺失数据与其他任何观测或未观测变量都不相关,则数据为完全随机缺失(MCAR)。
(2)随机缺失:若某变量上的缺失数据与其他观测变量相关,与它自己的未观测值不相关,则数据为随机缺失(MAR)。
(3)非随机缺失:若缺失数据不属于MCAR或MAR,则数据为非随机缺失(NIMAR)。
2.识别缺失值
NA:代表缺失值;
NaN:代表不可能的值;
Inf:代表正无穷;
-Inf:代表负无穷。
is.na():识别缺失值;
is.nan():识别不可能值;
is.infinite():无穷值。
is.na()、is.nan()和is.infinte()函数的返回值示例
is.na(x)
is.nan(x)
is.infinite(x)
complete.cases()可用来识别矩阵或数据框中没有缺失值的行,若每行都包含完整的实例,则返回TRUE的逻辑向量,若每行有一个或多个缺失值,则返回FALSE;
3.探索缺失值模式
(1)列表显示缺失值
mice包中的md.pattern()函数可以生成一个以矩阵或数据框形式展示缺失值模式的表格
library(mice)
data(sleep,package="VIM")
md.pattern(sleep)
(2)图形探究缺失数据
VIM包中提供大量能可视化数据集中缺失值模式的函数:aggr()、matrixplot()、scattMiss()
library("VIM")
aggr(sleep,prop=TRUE,numbers=TRUE)#用比例代替了计数
matrixplot()函数可生成展示每个实例数据的图形
matrixplot(sleep)
浅色表示值小,深色表示值大;默认缺失值为红色。
marginplot()函数可生成一幅散点图,在图形边界展示两个变量的缺失值信息。
library("VIM")
marginplot(sleep[c("Gest","Dream")],pch=c(20),col=c("darkgray","red","blue"))
(3)用相关性探索缺失值
影子矩阵:用指示变量替代数据集中的数据(1表示缺失,0表示存在),这样生成的矩阵有时称作影子矩阵。
求这些指示变量间和它们与初始(可观测)变量间的相关性,有且于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。
head(sleep)
str(sleep)
x&-as.data.frame(abs(is.na(sleep)))
head(sleep,n=5)
head(x,n=5)
y&-x[which(sd(x)&0)]
cor(sleep,y,use="plete.obs")
4.理解缺失值数据的来由和影响
识别缺失数据的数目、分布和模式有两个目的:
(1)分析生成缺失数据的潜在机制;
(2)评价缺失数据对回答实质性问题的影响。
(1)缺失数据的比例有多大?
(2)缺失数据是否集中在少数几个变量上,抑或广泛存在?
(3)缺失是随机产生的吗?
(4)缺失数据间的相关性或与可观测数据间的相关性,是否可以表明产生缺失值的机制呢?
若缺失数据集中在几个相对不太重要的变量上,则可以删除这些变量,然后再进行正常的数据分析;
若有一小部分数据随机分布在整个数据集中(MCAR),则可以分析数据完整的实例,这样仍可得到可靠有效的结果;
若以假定数据是MCAR或MAR,则可以应用多重插补法来获得有铲的结论。
若数据是NMAR,则需要借助专门的方法,收集新数据,或加入一个相对更容易、更有收益的行业。
5.理性处理不完整数据
6.完整实例分析(行删除)
函数complete.cases()、na.omit()可用来存储没有缺失值的数据框或矩阵形式的实例(行):
newdata&-mydata[complete.cases(mydata),]
newdata&-na.omit(mydata)
options(digits=1)
cor(na.omit(sleep))
cor(sleep,use="complete.obs")
fit&-lm(Dream~Span+Gest,data=na.omit(sleep))
summary(fit)
7.多重插补
多重插补(MI)是一种基于重复模拟的处理缺失值的方法。
MI从一个包含缺失值的数据集中生成一组完整的数据集。每个模拟数据集中,缺失数据将使用蒙特卡洛方法来填补。
此时,标准的统计方法便可应用到每个模拟的数据集上,通过组合输出结果给出估计的结果,以及引入缺失值时的置信敬意。
可用到的包Amelia、mice和mi包
mice()函数首先从一个包含缺失数据的数据框开始,然后返回一个包含多个完整数据集的对象。每个完整数据集都是通过对原始数据框中的缺失数据进行插而生成的。
with()函数可依次对每个完整数据集应用统计模型
pool()函数将这些单独的分析结果整合为一组结果。
最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。
基于mice包的分析通常符合以下分析过程:
library(mice)
imp&-mice(mydata,m)
fit&-with(imp,analysis)
pooled&-pool(fit)
summary(pooled)
mydata是一个饮食缺失值的矩阵或数据框;imp是一个包含m个插补数据集的列表对象,同时还含有完成插补过程的信息,默认的m=5analysis是一个表达式对象,用来设定应用于m个插补的统计分析方法。方法包括做线回归模型的lm()函数、做广义线性模型的glm()函数、做广义可加模型的gam()、及做负二项模型的nbrm()函数。fit是一个包含m个单独统计分析结果的列表对象;pooled是一个包含这m个统计分析平均结果的列表对象。&/pre&&pre name="code" class="plain"&library(mice)
data(sleep,package="VIM")
imp&-mice(sleep,seed=1234)
fit&-with(imp,lm(Dream~Span+Gest))
pooled&-pool(fit)
summary(pooled)
impimp$imp$Dream
利用complete()函数可观察m个插补数据集中的任意一个,格式为:complete(imp,action=#)
dataset3&-complete(imp,action=3)
8.处理缺失值的其他方法
包含多种函数,支持简单插补、多重插补和典型变量插补
对多元正态颁数据中缺失值的最大似然估计
对数线性模型中多元类别型变量的多重插补
arrayImpute\arraryMissPattern、SeqKnn
处理微阵列缺失值数据的实用函数
longitudinalData
相关的函数列表,比如对时间序列缺失值进行插补的一系列函数
处理生存分析缺失值的Kaplan-Meier多重插补
一般位置模型中混合类别型和连续型数据的多重插补
多元面板数据或聚类的多重插补
(1)成对删除
处理含缺失值的数据集时,成对删除常作为行删除的备选方法使用。对于成对删除,观测只是当它含缺失数据的变量涉及某个特定分析时才会被删除。
cor(sleep,use="plete.obs")
虽然成对删除似乎利用了所有可用数据,但实际上每次计算只用了不同的数据集,这将会导致一些扭曲,故建议不要使用该方法。
(2)简单(非随机)插补
简单插补,即用某个值(如均值、中位数或众数)来替换变量中的缺失值。注意,替换是非随机的,这意味着不会引入随机误差(与多重衬托不同)。
简单插补的一个优点是,解决“缺失值问题”时不会减少分析过程中可用的样本量。虽然 简单插补用法简单,但对于非MCAR的数据会产生有偏的结果。若缺失数据的数目非常大,那么简单插补很可能会低估标准差、曲解变量间的相关性,并会生成不正确的统计检验的p值。应尽量避免使用该方法。
----------------------------------------------------------------
异常值分析是检验数据是否有录入错误以及含有不合常理的数据;
异常值是指样本中的个别值,其数据明显偏离其余的观测值。异常值也称为离群点,异常值的分析也称为离群点分析。
异常值处理一般分为以下几个步骤:异常值检测、异常值筛选、异常值处理。
其中异常值检测的方法主要有:箱型图、简单统计量(比如观察极(大/小)值),3σ原则&
异常值处理方法主要有:删除法、插补法、替换法。
数据不一致:指数据的矛盾性、不相容性;在数据挖掘过程中,不一致数据的产生主要发生在数据集成的过程中,可能是由于被挖掘数据是来自于从不同的数据源、重复存放的数据未能进行一致性地更新造成的。
下面主要是进行异常值检验、离群点分析、异常值处理:
提到异常值不得不说一个词:鲁棒性。就是不受异常值影响,一般是鲁棒性高的数据,比较优质。
一、异常值检验&
异常值大概包括缺失值、离群值、重复值,数据不一致。
1、基本函数
&summary可以显示每个变量的缺失值数量.
关于缺失值的检测应该包括:缺失值数量、缺失值比例、缺失值与完整值数据筛选。
#缺失值解决方案&&
sum(complete.cases(saledata))&&&&&&&&&#is.na(saledata)&&
sum(!complete.cases(saledata))&&
mean(!complete.cases(saledata))&&&&&&&#1/201数字,缺失值比例&&
saledata[!complete.cases(saledata),]&&#筛选出缺失值的数值 &
3、箱型图检验离群值
箱型图的检测包括:四分位数检测(箱型图自带)+1δ标准差上下+异常值数据点。
箱型图有一个非常好的地方是,boxplot之后,结果中会自带异常值,就是下面代码中的sp$out,这个是做箱型图,按照上下边界之外为异常值进行判定的。
上下边界,分别是Q3+(Q3-Q1)、Q1-(Q3-Q1)。&
sp=boxplot(saledata$"销量",boxwex=0.7)&&
title("销量异常值检测箱线图")&&
sd.s=sd(saledata[complete.cases(saledata),]$"销量")&&
mn.s=mean(saledata[complete.cases(saledata),]$"销量")&&
points(xi,mn.s,col="red",pch=18)&&
arrows(xi,&mn.s&-&sd.s,&xi,&mn.s&+&sd.s,&code&=&3,&col&=&"pink",&angle&=&75,&length&=&.1)&&
text(rep(c(1.05,1.05,0.95,0.95),length=length(sp$out)),labels=sp$out[order(sp$out)],&&
sp$out[order(sp$out)]+rep(c(150,-150,150,-150),length=length(sp$out)),col="red")&&
&代码中text函数的格式为text(x,label,y,col);points加入均值点;arrows加入均值上下1δ标准差范围箭头。
箱型图还有等宽与等深分箱法
4、数据去重
与存在一定区别,去重是纯粹的所有变量都是重复的,而数据分组合并可能是因为一些主键的重复。
数据去重包括重复检测(table、unique函数)以及重复数据处理(unique/duplicated)。
常见的有unique、数据框中duplicated函数,duplicated返回的是逻辑值。
二、异常值处理&
常见的异常值处理办法是删除法、替代法(连续变量均值替代、离散变量用众数以及中位数替代)、插补法(回归插补、多重插补)
除了直接删除,可以先把异常值变成缺失值、然后进行后续缺失值补齐。
实践中,异常值处理,一般划分为NA缺失值或者返回公司进行数据修整(数据返修为主要方法)
1、异常值识别
利用图形——箱型图进行异常值检测。
#异常值识别&&
par(mfrow=c(1,2))#将绘图窗口划为1行两列,同时显示两图&&
dotchart(inputfile$sales)#绘制单变量散点图,多兰图&&
pc=boxplot(inputfile$sales,horizontal=T)#绘制水平箱形图&&
代码来自《R语言数据分析与挖掘实战》第四节。
整行替换数据框里99%以上和1%以下的点,将99%以上的点值=99%的点值;小于1%的点值=1%的点值。
(本图来自CDA DSC,L2-R语言课程,常老师所述)
#异常数据处理&&
result[result$tot_derog
result[result$tot_derog
summary(result$tot_derog)&&&&&&&&&&&&&&&&&&&&#盖帽法之后,查看数据情况&&
fix(inputfile)#表格形式呈现数据&&
which(inputfile$sales==6607.4)#可以找到极值点序号(位置)是啥 &
把缺失值数据集、非缺失值数据集分开。
#缺失值的处理&&
inputfile$date=as.numeric(inputfile$date)#将日期转换成数值型变量&&
sub=which(is.na(inputfile$sales))#识别缺失值所在行数&&
inputfile1=inputfile[-sub,]#将数据集分成完整数据和缺失数据两部分&&
inputfile2=inputfile[sub,] &
3、噪声数据处理——分箱法
将连续变量等级化之后,不同的分位数的数据就会变成不同的等级数据,连续变量离散化了,消除了极值的影响。
4、异常值处理——均值替换
数据集分为缺失值、非缺失值两块内容。缺失值处理如果是连续变量,可以选择均值;离散变量,可以选择众数或者中位数。
计算非缺失值数据的均值,
然后赋值给缺失值数据。&
#均值替换法处理缺失,结果转存&&
#思路:拆成两份,把缺失值一份用均值赋值,然后重新合起来&&
avg_sales=mean(inputfile1$sales)#求变量未缺失部分的均值&&
inputfile2$sales=rep(avg_sales,n)#用均值替换缺失&&
result2=rbind(inputfile1,inputfile2)#并入完成插补的数据 &
5、异常值处理——回归插补法
#回归插补法处理缺失,结果转存&&
model=lm(sales~date,data=inputfile1)#回归模型拟合&&
inputfile2$sales=predict(model,inputfile2)#模型预测&&
result3=rbind(inputfile1,inputfile2) &
6、异常值处理——多重插补——mice包
注意:多重插补的处理有两个要点:先删除Y变量的缺失值然后插补& &1、被解释变量有缺失值的观测不能填补,只能删除,不能自己乱补;& &2、只对放入模型的解释变量进行插补。
比较详细的来介绍一下这个多重插补法。笔者整理了大致的步骤简介如下:
缺失数据集——MCMC估计插补成几个数据集——每个数据集进行插补建模(glm、lm模型)——将这些模型整合到一起(pool)——评价插补模型优劣(模型系数的t统计量)——输出完整数据集(compute)&
步骤详细介绍:
函数mice()首先从一个包含缺失数据的数据框开始,然后返回一个包含多个(默认为5个)完整数据集的对象。
每个完整数据集都是通过对原始数据框中的缺失数据进行插补而生成的。&由于插补有随机的成分,因此每个完整数据集都略有不同。
其中,mice中使用决策树cart有以下几个要注意的地方:该方法只对数值变量进行插补,分类变量的缺失值保留,cart插补法一般不超过5k数据集。
然后,&with()函数可依次对每个完整数据集应用统计模型(如线性模型或广义线性模型)&,
最后,&pool()函数将这些单独的分析结果整合为一组结果。最终模型的标准误和p值都将准确地反映出由于缺失值和多重插补而产生的不确定性。&
#多重插补法处理缺失,结果转存&&
library(lattice)&#调入函数包&&
library(MASS)&&
library(nnet)&&
library(mice)&#前三个包是mice的基础&&
imp=mice(inputfile,m=4)&#4重插补,即生成4个无缺失数据集&&
fit=with(imp,lm(sales~date,data=inputfile))#选择插补模型&&
pooled=pool(fit)&&
summary(pooled)&&
result4=complete(imp,action=3)#选择第三个插补数据集作为结果&&
结果解读:
(1)imp对象中,包含了:每个变量缺失值个数信息、每个变量插补方式(PMM,预测均值法常见)、插补的变量有哪些、预测变量矩阵(在矩阵中,行代表插补变量,列代表为插补提供信息的变量, 1和0分别表示使用和未使用);
同时 &利用这个代码imp$imp$sales &可以找到,每个插补数据集缺失值位置的数据补齐具体数值是啥。
&&imp$imp$sales&&
&&&&&&&&1&&&&&&2&&&&&&3&&&&&&4&&
9&&3.1&3.1&&
15&4.7&4.7 &&
(2)with对象。插补模型可以多样化,比如lm,glm都是可以直接应用进去,详情可见《R语言实战》第十五章;
(3)pool对象。summary之后,会出现lm模型系数,可以如果出现系数不显著,那么则需要考虑换插补模型;
(4)complete对象。m个完整插补数据集,同时可以利用此函数输出。
mice包提供了一个很好的函数md.pattern(),用它可以对缺失数据的模式有个更好的理解。还有一些可视化的界面,通过VIM、箱型图、lattice来展示缺失值情况。可见博客:
三、离群点检测
离群点检测与异常值主要的区别在于:
异常值针对单一变量,而离群值指的是很多变量综合考虑之后的异常值。
下面介绍一种基于聚类+欧氏距离的离群点检测方法。
基于聚类的离群点检测的步骤如下:数据标准化——聚类——求每一类每一指标的均值点——每一类每一指标生成一个矩阵——计算欧式距离——画图判断。
Data=read.csv(".data.csv",header=T)[,2:4]&&
Data=scale(Data)&&
set.seed(12)&&
km=kmeans(Data,center=3)&&
print(km)&&
km$centers&&#每一类的均值点&&
#各样本欧氏距离,每一行&&
x1=matrix(km$centers[1,],&nrow&=&940,&ncol&=3&,&byrow&=&T)&&
juli1=sqrt(rowSums((Data-x1)^2))&&
x2=matrix(km$centers[2,],&nrow&=&940,&ncol&=3&,&byrow&=&T)&&
juli2=sqrt(rowSums((Data-x2)^2))&&
x3=matrix(km$centers[3,],&nrow&=&940,&ncol&=3&,&byrow&=&T)&&
juli3=sqrt(rowSums((Data-x3)^2))&&
dist=data.frame(juli1,juli2,juli3)&&
##欧氏距离最小值&&
y=apply(dist,&1,&min)&&
plot(1:940,y,xlim=c(0,940),xlab="样本点",ylab="欧氏距离")&&
points(which(y&2.5),y[which(y&2.5)],pch=19,col="red") &
&参考来源于:
https://kknews.cc/zh-cn/tech/e2v4z.html
http://blog.csdn.net/sinat_/article/details/
阅读(...) 评论()

我要回帖

更多关于 数据异常值 的文章

 

随机推荐