当前位置:首页 > R语言学习系列16-异常值处理
16. 异常值处理
目录:
一. 用箱线图检测异常值
二.使用局部异常因子法(LOF法)检测异常值 三.用聚类方法检测异常值 四.检测时间序列数据中的异常值 五.基于稳健马氏距离检测异常值 正文:
异常值,是指测量数据中的随机错误或偏差,包括错误值或偏离均值的孤立点值。在数据处理中,异常值会极大的影响回归或分类的效果。
为了避免异常值造成的损失,需要在数据预处理阶段进行异常值检测。另外,某些情况下,异常值检测也可能是研究的目的,例如,数据造假的发现、电脑入侵的检测等。
一、用箱线图检测异常值
在一条数轴上,以数据的上下四分位数(Q1-Q3)为界画一个矩形盒子(中间50%的数据落在盒内);在数据的中位数位置画一条线
段为中位线;用◇标记数据的均值;默认延长线不超过盒长的1.5倍,之外的点认为是异常值(用○标记)。
盒形图的主要应用就是,剔除数据的异常值、判断数据的偏态和尾重。
R语言实现,使用函数boxplot.stats(),基本格式为:
[stats, n, conf, out]=
boxplot.stats(x, coef=1.5, do.conf=TRUE, do.out=TRUE)
其中,x为数值向量(NA、NaN值将被忽略);coef为盒须的长度为几倍的IQR(盒长),默认为1.5;do.conf和do.out设置是否输出conf和out
返回值:stats返回5个元素的向量值,包括盒须最小值、盒最小值、中位数、盒最大值、盒须最大值;n返回非缺失值的个数;conf返回中位数的95%置信区间;out返回异常值。
单变量异常值检测:
set.seed(2016)
x<-rnorm(100)#生成100个服从N(0,1)的随机数
summary(x)#x的汇总信息
Min. 1st Qu.Median Mean 3rd Qu. Max.
-2.7910 -0.7173 -0.2662 -0.1131 0.5917 2.1940
boxplot.stats(x)#用箱线图检测x中的异常值 $stats
[1] -2.5153136 -0.7326879 -0.2662071 0.5929206 2.1942200
$n
[1] 100 $conf
[1] -0.47565320 -0.05676092 $out
[1] -2.791471 boxplot(x)#绘制箱线图
多变量异常值检测:
x<-rnorm(100) y<-rnorm(100)
df<-data.frame(x,y)#用x,y生成两列的数据框 head(df) x y
1 0.41452353 0.4852268 2 -0.47471847 0.6967688 3 0.06599349 0.1855139 4 -0.50247778 0.7007335 5 -0.82599859 0.3116810 6 0.16698928 0.7604624
#寻找x为异常值的坐标位置
a<-which(x %in% boxplot.stats(x)$out) a
[1] 78 81 92
#寻找y为异常值的坐标位置
b<-which(y %in% boxplot.stats(y)$out) b
[1] 27 37
intersect(a,b)#寻找变量x,y都为异常值的坐标位置 integer(0)
plot(df)#绘制x, y的散点图
p2<-union(a,b)#寻找变量x或y为异常值的坐标位置 [1] 78 81 92 27 37
points(df[p2,],col=\#标记异常值
二、使用局部异常因子法(LOF法)检测异常值
局部异常因子法(LOF法),是一种基于概率密度函数识别异常值的算法。LOF算法只对数值型数据有效。
算法原理:将一个点的局部密度与其周围的点的密度相比较,若前者明显的比后者小(LOF值大于1),则该点相对于周围的点来说
共分享92篇相关文档