R语言-异常数据处理2

在R中进行基于稳健马氏距离的异常检验

前言

  我们研究的数据中经常包含着一些不同寻常的样本,这称之为异常值(Outlier)。这些异常值会极大的影响回归或分类的效果。异常值产生的原因有很多,其中可能是人为错误、数据测量误差,或者是实际确实存在这样的异常。为了使模型能够反映大部分数据的规律,所以在数据预处理阶段要进行异常值检测,为下一步分析奠定基础。还有一类情况是,当研究人员希望发现不平凡的事物时,异常值检测本身就是分析的首要目的。例如在信用卡欺诈、计算机入侵检测等问题中。此时由于样本的不平衡性,导致一般的分类方法无法使用,必须转而考虑异常检测方法。

  一种常用的异常检验思路是观察各样本点到样本中心的距离。如果某些样本点的距离太大,就可以判断是异常值。这里距离的度量一般使用马氏距离(Mahalanobis Distance)。因为马氏距离不受量纲的影响,而且在多元条件下,马氏距离还考虑了变量之间的相关性,这使得它优于欧氏距离。

  但是传统的马氏距离检测方法是不稳定的,因为个别异常值会把均值向量和协方差矩阵向自己方向吸引,这样算出来的样本马氏距离起不了检测异常值的所用。所以首先要利用迭代的思想构造一个稳健的均值和协方差矩阵估计量,然后计算稳健马氏距离(Robust Mahalanobis Distance)。这样使得异常值能够正确地被识别出来。

  在mvoutlier包中提供了基于稳健马氏距离的异常值检验方法。我们首先构造一个二维变量的人工数据,其中80个样本是标准正态分布,另一小撮别有用心的样本是均值为5,标准差为1的观测值。我们首先使用uni.plot函数在一维空间中观察这个数据。

    library(mvoutlier)set.seed(1234)x <- cbind(rnorm(80), rnorm(80))y <- cbind(rnorm(10, 5, 1), rnorm(10, 5, 1))z <- rbind(x,y)# 一维数据的异常检验res1 <- uni.plot(z)# 返回异常值的编号which(res1$outliers==T)################################> library(mvoutlier)> set.seed(1234)> x <- cbind(rnorm(80), rnorm(80))> y <- cbind(rnorm(10, 5, 1), rnorm(10, 5, 1))> z <- rbind(x,y)> # 一维数据的异常检验> res1 <- uni.plot(z)> # 返回异常值的编号> which(res1$outliers==T)[1] 20 62 81 82 83 84 85 86 87 88 89 90

%E5%BC%82%E5%B8%B8%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%862Rplot01.bmp

  上图中红色点表示疑似异常值,因为它偏离均值太远。更多时候我们会处理多元异常检测问题,此时用aq.plot函数来实行基于稳健马氏距离的异常值检验方法。下图中左上角图形为原始数据,右上角图形的X轴为各样本的稳健马氏距离排序,Y轴为距离的经验分布,红色曲线为卡方分布,蓝色垂线表示阀值,在阀值右侧的样本判断为异常值。左下和右下两张图均是用不同颜色来表示异常值,只是阀值略有不同。可以观察到那一小撮异常值被正确的判断出来,但也有两个正常值被误判为异常值,此时需要调整参数。

    # 基于稳健马氏距离的多元异常值检验res2 <-aq.plot(z)# 返回异常值的编号which(res2$outliers==T)################################> res2 <-aq.plot(z)> which(res2$outliers==T)[1] 20 62 81 82 83 84 85 86 87 88 89 90

%E5%BC%82%E5%B8%B8%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%862Rplot02.bmp

  如果数据的维数过高,例如基因数据那样几千个变量,数据之间变得稀疏,从而使得距离不再有很大意义。此时可以融合主成分降维的思路来进行异常值检验。mvoutlier包中提供了pcout函数来进行高维空间异常检验。下面是以swiss数据集为例来判断异常值。

    # 在高维空间中的异常值检验data(swiss)res3 <- pcout(swiss)# 返回异常值的编号which(res3$wfinal01==0)################################> # 在高维空间中的异常值检验> data(swiss)> res3 <- pcout(swiss)> # 返回异常值的编号> which(res3$wfinal01==0)Delemont Franches-Mnt   Porrentruy        Broye        Glane 2            3            6            7            8 Gruyere       Sarine      Veveyse    La Vallee      Conthey 9           10           11           19           31 Entremont       Herens     Martigwy      Monthey   St Maurice 32           33           34           35           36 Sierre         Sion V. De Geneve 37           38           45 

参考资料

  • R语言:处理异常值1

  • R语言:处理异常值2

转载于:https://www.cnblogs.com/cloudtj/articles/5520230.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《零基础看得懂的C++入门教程 》——(2)什么是数据类型、变量?一看便会

一、学习目标 了解基本常用的数据类型了解什么是变量 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点这篇&#xff0c;学习方法和一些原理C与C都是相同的…

pycharm 快捷键介绍

CtrlN (Navigate | Class) 打开输入框输入要查找的类名 Ctrl空格 代码自动补全 Ctrl空格&#xff08;按两次&#xff09;对于没有导入的类自动完成导入代码并自动补全 AltF7 查找方法变量在工程中的所有应用 CtrlQ (View | Quick Documentation). 快速查看文档 …

db2和mysql语句区别_db2和mysql语法的区别是什么

MySQL默认使用大小写敏感的数据库名、表名和列名(可以通过lower_case_table_names参数控制是否大小写敏感)&#xff0c;DB2数据库对大小写不敏感。虽然MySQL与DB2都遵循并符合SQL92标准且大多数SQL相互兼容&#xff0c;但是在一些细节的实现上有一些不同的地方。比如&#xff1…

查缺补漏系统学习 EF Core 6 - 数据查询

这是 EF Core 系列的第四篇文章&#xff0c;上一篇文章讲述了 EF Core 中的实体迁移与数据播种。这篇文章盘点一下 EF Core 的几种数据查询方式&#xff0c;内容较多分上下两篇。点击上方或后方蓝字&#xff0c;阅读 EF Core 系列合集。简单查询在 EF Core 中&#xff0c;每个查…

《零基础看得懂的C++入门教程 》——(3)表达式花样挺多鸭

一、学习目标 了解变量之间的计算了解什么是表达式了解什么是自增、自减 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点这篇&#xff0c;学习方法和一些…

prometheus python client

为什么80%的码农都做不了架构师&#xff1f;>>> 当我刚开始准备使用Python写一个promethues的client的时候&#xff0c;并没有想到过程这么麻烦。github上的大佬们也没兴趣帮我解决这些细节的问题。以下是我在使用prometheus_client遇到的一些问题&#xff0c;仅供…

【遥感数字图像处理】实验:遥感影像分类(监督、非监督分类)完整流程(Erdas版)

一.实验目的: 理解计算机图像分类的基本原理,掌握数字图像非监督分类以及监督分类的具体方法和过程,以及两种分类方法的区别。 二.实验平台:ERDAS IMAGINE 9.1 三.实验要求:掌握非监督分类;非监督分类结果评价;监督分类;监督分类结果评价;分类后处理。 四.实验…

重大跨越!Windows 11 23H2 25115 推送:2023 年更新测试开启,水印回归

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 预览版 Build 25115。主要变化1.微软宣布从 Dev 频道切换到 Beta 频道的选项正式关闭&#xff0c;Beta 频道将继续测试 Windows 11 版本 22H2&#xff0c;而 Dev 频道将开启 2023 年更新 Windows 11 …

《零基础看得懂的C++入门教程 》——(4)条件判断原来如此

一、学习目标 了解什么是条件判断了解多个条件判断了解输入了解什么是逻辑与、逻辑或 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点这篇&#xff0c;学…

Django学习笔记(4)

为什么80%的码农都做不了架构师&#xff1f;>>> 首先提一个问题&#xff1a;在Django中如何处理CRSF(Cross-site request forgery)? 先看一下CSRF原理。 其实就是恶意网站利用正常网站的cookie去非法请求。 ##Java处理方式## 一般做法需要后台和前端配合采取策略去…

.NET版OCR紧随PP-OCRv3重磅发布

.net版OCR地址PaddleOCRSharp&#xff1a;https://gitee.com/raoyutian/paddle-ocrsharpPaddleOCRSharp是一个基于PaddleOCR的C代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能&#xff0c;同时针对小图识别不准的情况下&a…

《零基础看得懂的C++入门教程 》——(5) 容我套个娃 循环

一、学习目标 了解循环的使用方法 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点这篇&#xff0c;学习方法和一些原理C与C都是相同的《脱离学习误区》 …

Android两个注意事项.深入了解Intent和IntentFilter(两)

深入理解Intent和IntentFiler(二)转载请表明出处&#xff1a;http://blog.csdn.net/u012637501(嵌入式_小J的天空) 在上一篇文章中&#xff0c;我们比較具体学习了"Intent"的相关知识&#xff0c;如今将学习怎样设置Intent对象的这些属性以及怎样使用他们来启动组件。…

Oracle常用sql语句(一)

Sql的分类DDL操作数据库表列等表基本的操作主键索引视图 常用数据类型字符串类型数字类型日期类型LOB类型LONG类型 数据转换character datenumbercharacter通用函数条件表达式Sql的分类 DDL &#xff08;Data Definition Language&#xff09;&#xff1a;数据定义语言&#xf…

ASP.NET Web API 实现客户端Basic(基本)认证 之简单实现

优点是逻辑简单明了、设置简单。 缺点显而易见&#xff0c;即使是BASE64后也是可见的明文&#xff0c;很容易被破解、非法利用&#xff0c;使用HTTPS是一个解决方案。 还有就是HTTP是无状态的&#xff0c;同一客户端每次都需要验证。 实现&#xff1a; 客户端在用户输入用户名及…

WPF|分享一个登录界面设计

分享一个登录界面&#xff0c;先看效果图&#xff1a;准备文中使用到了一些图标&#xff1a;我们可以从 iconfont[1]免费下载&#xff1a;代码简单说明请随手创建一个WPF项目&#xff08;.NET Framework、.NET 5\6\7皆可&#xff09;&#xff0c;使用tree /f命令看看最终的文件…

《零基础看得懂的C++入门教程 》——(6)自己动手写个函数

一、学习目标 了解C语言的自定义函数的使用方法了解C语言自定义函数的传参了解C语言自定义函数的返回值 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点…

【计算机图形学】实验:C#语言采用GDI+定义笔刷并填充图形完整实验操作流程

一、实验目的: 熟练掌握在.net环境下对笔刷的定义,并可用定义好的笔刷填充多边形。 二、实验准备: 学习在.net环境下GDI+所提供的5种笔刷类型,掌握定义笔刷的方法和填充图形的函数,如FillRectange ( )、FillEllipse ( )等。 三、实验内容: 在.net环境中设计一个窗体…

管道模式 pipe

先放一个图&#xff0c;预则立嘛 PipelinePattern.rar 这里是 不完整的码转载于:https://www.cnblogs.com/ganmk--jy/p/5525897.html

《零基础看得懂的C++入门教程 》——(7)小数组玩起来

一、学习目标 了解数组的使用方法了解一维数组的使用方法了解一维数组与循环的使用方法 目录 预备第一篇&#xff0c;使用软件介绍在这一篇&#xff0c;C与C使用的软件是一样的&#xff0c;查看这篇即可&#xff1a;《软件介绍》 想了解编译原理和学习方法点这篇&#xff0c…