1 / 15
文档名称:

R语言学习系列16-异常值处理.docx

格式:docx   大小:2,085KB   页数:15页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

R语言学习系列16-异常值处理.docx

上传人:才艺人生 2024/5/10 文件大小:2.04 MB

下载得到文件列表

R语言学习系列16-异常值处理.docx

相关文档

文档介绍

文档介绍:该【R语言学习系列16-异常值处理 】是由【才艺人生】上传分享,文档一共【15】页,该文档可以免费在线阅读,需要了解更多关于【R语言学习系列16-异常值处理 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。R语言学****系列-:(LOF法):异常值,是指测量数据中的随机错误或偏差,包括错误值或偏离均值的孤立点值。在数据处理中,异常值会极大的影响回归或分类的效果。为了避免异常值造成的损失,需要在数据预处理阶段进行异常值检测。另外,某些情况下,异常值检测也可能是研究的目的,例如,数据造假的发现、电脑入侵的检测等。一、用箱线图检测异常值在一条数轴上,以数据的上下四分位数(Q-Q)为界画一个矩形盒子(中间%的数据落在盒内);(x)#用箱线图检测x中的异常值$stats[]-.-.-...$n[]$conf[]-.-.$out[]-.boxplot(x)#绘制箱线图多变量异常值检测:x<-rnorm()y<-rnorm()df<-(x,y)#用x,y生成两列的数据框head(df)xy..-....-..-....#寻找x为异常值的坐标位置a<-which(x%in%(x)$out)a[]#寻找y为异常值的坐标位置b<-which(y%in%(y)$out)b[]intersect(a,b)#寻找变量x,y都为异常值的坐标位置integer()plot(df)#绘制x,y的散点图p<-union(a,b)#寻找变量x或y为异常值的坐标位置[]points(df[p,],col="red",pch="x",cex=)#标记异常值二、使用局部异常因子法(LOF法)检测异常值局部异常因子法(LOF法),是一种基于概率密度函数识别异常值的算法。LOF算法只对数值型数据有效。算法原理:将一个点的局部密度与其周围的点的密度相比较,若前者明显的比后者小(LOF值大于),则该点相对于周围的点来说就处于一个相对比较稀疏的区域,这就表明该点是一个异常值。R语言实现:使用DMwR或dprep包中的函数lofactor(),基本格式为:lofactor(data,k)其中,data为数值型数据集;k为用于计算局部异常因子的邻居数量。library(DMwR)iris<-iris[,:]#只选数值型的前列head(iris)........................<-lofactor(iris,k=)#计算每个样本的LOF值plot(density())#绘制LOF值的概率密度图#LOF值排前的数据作为异常值,提取其样本号out<-order(,decreasing=TRUE)[:]out[]iris[out,]#....................对鸢尾花数据进行主成分分析,并利用产生的前两个主成分绘制成双标图来显示异常值:n<-nrow(iris)#样本数n[]labels<-:n#用数字-n标注labels[-out]<-"."#非异常值用"."标注biplot(p(iris),cex=.,xlabs=labels)说明:p()对数据集iris做主成份分析,biplot()取主成份分析结果的前两列数据即前两个主成份绘制双标图。上图中,x轴和y轴分别代表第一、二主成份,箭头指向了原始变量名,其中个异常值分别用对应的行号标注。也可以通过函数pairs()绘制散点图矩阵来显示异常值,其中异常值用红色的"+"标注:pchs<-rep(".",n)pchs[out]="+"cols<-rep("black",n)cols[out]<-"red"pairs(iris,pch=pchs,col=cols)注:另外,Rlof包中函数lof()可实现相同的功能,并且支持并行计算和选择不同距离。三、用聚类方法检测异常值通过把数据聚成类,将那些不属于任何一类的数据作为异常值。比如,使用基于密度的聚类DBSCAN,如果对象在稠密区域紧密相连,则被分组到一类;那些不会被分到任何一类的对象就是异常值。??也可以用k-means算法来检测异常值:将数据分成k组,通过把它们分配到最近的聚类中心。然后,计算每个对象到聚类中心的距离(或相似性),并选择最大的距离作为异常值。<-kmeans(iris,centers=)#$centers#............$cluster#输出聚类结果[][][][][][]#centers返回每个样本对应的聚类中心样本centers<-$centers[$cluster,]#计算每个样本到其聚类中心的距离distances<-sqrt(rowSums((iris-centers)^))#找到距离最大的个样本,认为是异常值out<-order(distances,decreasing=TRUE)[:]out#异常值的样本号[]iris[out,]#....................#绘制聚类结果plot(iris[,c("","")],pch="o",col=$cluster,cex=.)#聚类中心用"*"标记points($centers[,c("","")],col=:,pch=,cex=.)#异常值用"+"标记points(iris[out,c("","")],pch="+",col=,cex=.)