异常值检测——绝对中位差MAD(median absolute deviation )

2023-10-27

一、MAD介绍

MAD(median absolute deviation)绝对中位差
在统计学中,MAD是对单变量数值型数据的样本偏差的一种鲁棒性测量,即是用来描述单变量样本在定量数据中可变的一种标准。

In statistics, the median absolute deviation (MAD) is a measure of statistical dispersion and it is a robust measure of the variability of a univariate sample of quantitative data.

公式
在这里插入图片描述
理解:先计算出数据与数据的中位数之间的偏差,MAD是偏差绝对值的中位数。

MAD与标准差SD( standard deviation)的区别:
MAD是一种鲁棒性统计量,比标准差更能适应数据集中的异常值。对于标准差,使用的是数据到均值的距离平方,较大的偏差权重较大,异常值对结果影响不能忽视。对于MAD,少量的异常值不会影响实验的结果。

用途:MAD常用于异常值检测
假定实验数据服从正态分布,让异常值落在两侧50%的面积内,让正常值落在中间50%的区域内。
在这里插入图片描述
具体解算过程:https://blog.csdn.net/horses/article/details/78749485

二、计算MAD方法

(1)Excel中计算MAD

(2)python计算MAD
代码:

from statsmodels import robust #import package
df.apply(robust.mad) #use function to calculate MAD

根据不同数据类型使用不同的包:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.median_absolute_deviation.html

(3)R语言计算MAD

三、MAD实现剔除异常值

代码实现:

def mad_based_outlier(points, thresh=3.5): #这里设定的阈值3.5
    if len(points.shape) == 1:
        points = points[:,None]
    median = np.median(points, axis=0)
    diff = np.sum((points - median)**2, axis=-1)
    diff = np.sqrt(diff)
    med_abs_deviation = np.median(diff)

    modified_z_score = 0.6745 * diff / med_abs_deviation

    return modified_z_score > thresh

四、其它检测异常值方法

https://www.zhihu.com/question/38066650
(1)数字异常值:是通过IQR(InterQuartile Range)计算得的。
计算第一和第三四分位数(Q1、Q3),异常值是位于四分位数范围之外的数据点x i:四分位法(箱线图)k = 1.5
在这里插入图片描述
在这里插入图片描述
代码实现:

def percentile_based_outlier(data, threshold=95):
    diff = (100 - threshold) / 2.0
    minval, maxval = np.percentile(data, [diff, 100 - diff])
    return (data < minval) | (data > maxval)

(2)Z-score
Z-score是一维或低维特征空间中的参数异常检测方法。即描述一个值与一组值的平均值之间关系的数值测量。

Z-score假定数据是服从高斯分布的,异常值是分布在两端的数据,因此是远离数据的平均值。简单理解,计算每个数据点和均值、标准偏差的一个关系参数,与设定的阈值对比,当关系参数绝对值大于这个阈值的时候,则为异常值,应该剔除掉(阈值一般设置为2.5、3.0和3.5)。具体的计算公式可见:https://www.zhihu.com/question/38066650

在这里插入图片描述
Z-score更多介绍资料:https://www.statisticshowto.com/probability-and-statistics/z-score/

注意:在进行异常值处理之前,需先进行异常值检验,比较常用的有两种方法:
(1)数据服从正态分布,采用3σ原则。
实现代码:

#插入一列three_sigma来表示是否是异常值
data['three_sigma'] = data['variable'].transform( lambda x: (x.mean()-3*x.std()>x)|(x.mean()+3*x.std()<x))

#筛选出目标变量的异常值
data[data['three_sigma']==True]

#保留正常的数据
correct_data=data[data['three_sigma']==False]

(2)数据不服从正太分布,采用箱线图检验。
实现代码:

#定义一个下限
lower = data['variable'].quantile(0.25)-1.5*(data['variable'].quantile(0.75)-data['variable'].quantile(0.25))

#定义一个上限
upper = data['variable'].quantile(0.25)+1.5*(data['variable'].quantile(0.75)-data['variable'].quantile(0.25))

#重新加入一列,用于判断
data['qutlier'] = (data['variable'] < lower) | (data['variable'] > upper) 

#筛选异常数据
data[data['qutlier'] ==True]

#过滤掉异常数据
qutlier_data=data[data['qutlier'] ==False]

参考资料:https://blog.csdn.net/qq_40195360/article/details/84570503

参考资料

MAD检测异常值:https://blog.csdn.net/lanchunhui/article/details/80381516

绝对中位差Median Absolute Deviation:https://blog.csdn.net/horses/article/details/78749485

(强推)Pythonic way of detecting outliers in one dimensional observation data:https://stackoverflow.com/questions/22354094/pythonic-way-of-detecting-outliers-in-one-dimensional-observation-data?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

常见的检测异常值方法:https://www.zhihu.com/question/38066650

(强推)异常值检测方法汇总:https://blog.csdn.net/qq_40195360/article/details/105380444

(详细)Test to identify outliers in data series:https://www.pdf-archive.com/2016/07/29/outlier-methods-external/outlier-methods-external.pdf

How to Remove Outliers in Python:https://www.statology.org/remove-outliers-python/

(强推)Univariate Anomaly Detection – A walkthrough in Python:https://www.analyticsvidhya.com/blog/2021/06/univariate-anomaly-detection-a-walkthrough-in-python/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

异常值检测——绝对中位差MAD(median absolute deviation ) 的相关文章

  • Git-远程仓库(GitLab)

    系列文章 Git 入门小结 Git 分支 Git 常用命令 Git 注册远程仓库 Git 远程仓库 1 生成SSH KEY ssh keygen t rsa C youremail xx com git里注册的邮箱 可以用git confi
  • MybatisPlus更新时会自动忽略传值为NULL的字段

    三种方案解决MybatisPlus更新时会自动忽略传值为NULL的字段 一 背景 二 解决方案 2 1 使用 TableField updateStrategy FieldStrategy IGNORED 注解添加在字段上 在枚举 Fiel
  • Python数据分析与大数据技术与应用高级教程

    Python数据分析与大数据技术与应用高级教程 教程地址 https www piaodoo com 课程目标 虚拟现实 增强现实及混合现实技术既密切相关 又有显著差别 培训课程旨在帮助学员深入理解这三者的思想精髓及其统一技术构架 梳理出V
  • Hexo 完整使用教程

    官网 官网地址 https hexo io zh cn 环境 1 node hexo 基于 node 所以首先要安装node环境 2 npm 包管理工具 环境配置请参考本站对应安装教程 快速开始 安装 hexo npm install g
  • Mysql数据库内联查询、左连接查询、右连接查询、自连接查询介绍

    目录 一 内联查询 1 inner join 只查询键值一致 交叉 的部分 2 演示 二 左连接 1 left join 以左表为标准 查询输出左表中没有的字段信息 2 演示 三 右连接 1 right join 以右表为标准 查询输出右表
  • 区块如何防篡改_一种区块链防篡改技术的优化方法与流程

    本发明涉及区块链技术领域 具体涉及一种区块链防篡改技术的优化方法 背景技术 区块链是比特币等数字虚拟货币的底层技术 通过去中心化的数据记录 由全网所有的节点共同维护数据 实现安全地存储数据 具有不可伪造性 不可篡改性 可追溯性 匿名性等特点
  • Java编程练习之:水仙花数

    文章目录 1 题目 2 思路 3 代码 4 运行结果 1 题目 打印出所有的 水仙花数 所谓 水仙花数 是指一个三位数 其各位数字立方和等于该数本身 例如 153是一个 水仙花数 因为153 1的三次方 5的三次方 3的三次方 2 思路 这
  • 线程池的简介说明

    在多线程应用程序开发中 如果我们不使用线程池 则每次创建和销毁线程将会消耗宝贵的CPU 内存资源 所以我们必须创建一个线程池 线程池的功能 线程池用于管理线程 用于减少系统资源消耗 创建一个线程池 实现思路 借助线程池类Executor 借
  • Java Map集合 体系

    1 Collection集合 1 1 常用集合的体系 mermaid svg dmg6k5CugOsij3Ax label font family trebuchet ms verdana arial font family var mer
  • openGL之API学习(九十四)几何着色器的几个参数设置含义

    设定输入几何图元的类型 比如GL TRIANGLES glProgramParameteriEXT program GL GEOMETRY INPUT TYPE EXT inputGeometryType 设定输出几何图元的类型 比如GL
  • Leetcode之KMP字符串算法

    针对题目28题 实现strStr 功能找出needle在haystack字符串的第一个位置 否则返回 1 当然有暴力法 但是时间复杂度是O mn 而KMP算法提前计算出needle字符串的重复数据加以利用 j能够有效的回退到可能的位置 时间
  • 树干树叶点云分类

    将扫描的树木点云的树干树枝和树叶分类出来 后续放出程序代码
  • Cluster & Docker

    操作系统解决主要问题之一就是如何在一台机器上调度硬件资源 比如为一个进程分配cpu gpu 存储资源等 使得进程可以高效 按照预期地完成运行 云和互联网解决的主要问题之一是如何在多台机器之间调度硬件资源or调度信息资源 这就产生了更丰富架构
  • SpringCloud最新版环境集成-2021年11月

    总述 之前搞过SpringCloud项目 但版本是netflix维护的伦敦地铁站名称的版本 现在想做一下笔记 并尝试最新版本 看有什么变动没 结果还真有一堆坑 此项目集成了eureka feign ribbon hystrix zuul五大
  • 在.Net 6项目中设置MySql数据库的连接配置文件appsettings.json及在Program.cs中读取配置文件并向DI容器注册服务。

    1 配置一 配置好ConnectionStrings 通过ConnectionString动态读取ServerVersion 推荐使用 appsettings json ConnectionStrings MoviesDBContext s
  • MFC + 自定义类的序列化与反序列化

    使类可序列化需要五个主要步骤 从 CObject 派生类 或从 CObject 派生的某个类中派生 重写 Serialize 成员函数 使用 DECLARE SERIAL 宏 在类声明中 定义不带参数的构造函数 为类在实现文件中使用 IMP
  • SQL 删除表数据行与重置自动增长字段

    delete 语句 delete from tablename 表名 where ID 列名 x 表示删除数据表中ID列的值为x的数据行 在ID列设置了自动增长主键列的情况下 这种删除方式将会保留该数据行所占用的自动增长值 此后添加数据时此

随机推荐

  • Linux内嵌链表(sys/queue.h)详解

    Linux 内嵌链表 sys queue h 详解 queue 简介 SLIST STAILQ LIST TAILQ CIRCLEQ 例程 queue 简介 C语言不像C 语言可以使用STL 在编程中需要用到链表时 通常需要程序员重新设计链
  • java中数据库重连

    当数据库重新启动 而导致程序无法连接 需要重启tomcat才能重连的解决办法 方法一 将连接池由DBCP改为C3P0 c3p0连接池本身具有数据库重连机制
  • 传统的目标检测算法

    1 基于滑动窗口的目标检测算法 滑动窗口 gt gt 特征提取 gt gt 分类器 图 滑动窗口目标检测流程 对输入的图像设置不同大小的滑窗 确定步长遍历整个图像 每次滑动完成后对当前选择框进行特征提取 SIFT HOG等 并使用事先训练好
  • python+opencv学习之路(一 )学习打开图片

    python opencv学习之路 一 学习打开图片 载入opencv和numpy模块 import cv2 import numpy as np 读取图片 img cv2 imread 1 jpg cv2 IMREAD COLOR 1 j
  • Android学习路线:如何成长为高级工程师

    博主参加了2014 CSDN博客之星评选 帮我投一票吧 点击给我投票 前言 之所以写这篇文章 是因为最近博客和我的开发群 215680213 中 不少小伙伴都让我讲讲android学习路线 所以我决定写一篇博客 来说明这个问题 既然有不少小
  • C++知识点37——拷贝构造函数

    无论是C 自定义的类还是STL内部的容器类 会显式的定义类的对象在拷贝 赋值和销毁时执行的操作 一个类通过五个成员函数来控制这些操作 拷贝构造函数 拷贝赋值运算符 移动构造函数 移动赋值运算符和析构函数 其中 拷贝构造函数和移动构造函数定义
  • 【SpingBoot】SpringBoot实现卷积神经模型代码

    下面是一个基本的卷积神经网络 CNN 模型代码示例 导入依赖
  • Ubuntu 经验 :设置EFI分区

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net boyStray article details 88915155 ubuntu18默
  • VMware报错,无法连接到虚拟机,并且vmware-vmx.exe应用程序无法正常运行,报错0xc000007b

    试了很多修复 启动 禁用之类的方法发现不适用 最终发现是安装的其他软件导致C 库发生改变 解决 控制面板 程序 卸载程序 找到下图中的两个 右键 卸载 修复 之后VMware就能正常使用了
  • StringBuffer/StringBuilder与使用加号“+”直接拼接字符串的区别

    StringBuffer StringBuilder拼接字符串与使用加号 拼接字符串的区别 一 使用 拼接字符串 1 字符串常量内存分析 2 String类型特性 3 使用 拼接字符串时内存分析 二 StringBuffer StringB
  • 分布式系统一致性研究,paxos算法

    感谢eric的敦促 感谢shuai的感召 我尝试记录一点混乱的思考 什么是分布式系统 毋庸置疑 Internet和DNS是两个典型的成功的分布式系统 那么 分布式系统是不是就是计算机网络 1990年 Sun Microsystems 公司提
  • Spring 的创建和使用

    目录 一 创建 Spring项目 二 存储 Bean 对象到Spring中 1 添加Spring配置文件 2 创建一个 Bean 对象 3 将 Bean 存储到 Spring 容器中 三 从 Spring 中获取并使用 Bean 对象 1
  • flutter Could not get unknown property ‘ndkVersion’

    使用的 flutter 版本为 3 7 2 编译运行 如下 Could not get unknown property ndkVersion for object of type com android build gradle inte
  • QSqlite3创建数据库表格时出现的create error QSqlError(““, ““, ““)

    QSqlite3创建数据库表格时出现的create error QSqlError 这个问题卡了很长时间 连接数据库成功了 但是创建表格时一直失败 通过 qCritical lt lt file lt
  • stm32学习笔记 AFIO重映射功能 以TIM2的CH1可以从PA0挪动到PA15的引脚上距离为例

    首先在STM32F103C8T6引脚定义的图里找到是否有可以复用的引脚 因为我们的TIM2 CH1 ETR的数据是在引脚PA0上显示 如果要换 根据此表只能换到PA15 如图PA15 默认 是调试端口所以如果要想让其作为普通IO口或者复用定
  • Blazor + Ant Design + .NET 5快速开发框架(1) - 项目创建

    目录 序言 模式选择 项目创建 序言 net 5发布至今已经有一段时间了 但是在国内一直不温不火 虽然心里可惜 但是没有什么办法 作为 net开发的一员 只能在前进的道路上留下一笔 这次使用Blazor是微软新出的前端框架 采用c 代替Ja
  • MathType丢失Mplugin.dll文件解决方法

    MathType有着强大的功能 能够进行多种数学符号编辑 所以用来编辑公式确实很方便 但是在对MathType进行安装时也会遇到很多问题 比如Mplugin dll文件缺失 这样就导致了MathType无法正常安装或者使用 具体解决方法如下
  • Linux各类下载方式

    FTP 基于TCP协议的文件存储与下载协议 两个端口 20与21 20端口用于数据的传输 21端口用于身份验证 SCP 是Linux系统下基于ssh协议的远程文件拷贝命令 scp filename username hostname pat
  • python函数的使用

    创建函数 函数名 形参1 形参2 形参n 代码块 函数名必须要符合标识符的规范 可以包含字母 数字 下划线 但是不能以数字开头 函数中保存的代码不会立刻执行 需要调用函数代码才会执行 函数中的参数 在定义函数时 可以在函数名后面的 中定义数
  • 异常值检测——绝对中位差MAD(median absolute deviation )

    文章目录 一 MAD介绍 二 计算MAD方法 三 MAD实现剔除异常值 四 其它检测异常值方法 参考资料 一 MAD介绍 MAD median absolute deviation 绝对中位差 在统计学中 MAD是对单变量数值型数据的样本偏