Python - 异常值检测(绝对中位差、平均值 和 LOF)

1. 单变量数据中检测异常点的方法:
  • 绝对中位差:如果一个点大于或小于3倍的绝对中位差,那它就被是视为异常点。中位值作为评估值要健壮得多,它是在升序排列的多个观察值中位于中间的观察值,要想彻底改变中位值,要替换掉远离中位值的一半观察值,因此有限样本击穿点是50%。
  • 平均值:对于高斯分布的数据来说,68.27%的数据集中在一个标准差的范围内,95.45%在两个标准差的范围内,99.73%在3个标准差的范围内,因此根据这个,和平均值相差3倍标准差的点被看作异常点,但平均值和标准差太容易受异常点干扰,其有限样本击穿点是0%。
(有效样本击穿点的定义是一个比例值,对超过这个比例值的的样本进行替换,评估方法将无法进行准确描述,有限样本击穿点越大,代表评估方法越robust。)

#标准差上下三倍绝对中位差之间属于正常点
import numpy as np
median = np.median(total_data)
b = 1.4826 #这个值应该是看需求加的,有点类似加大波动范围之类的
mad = b * np.median(np.abs(total_data-median))
lower_limit = median - (3*mad)
upper_limit = median + (3*mad)

#平均值上下三倍标准差之间属于正常点
std = np.std(total_data)
mean = np.mean(total_data)
b = 3
lower_limit = mean-b*std
upper_limit = mean+b*std
2. 多变量数据检测异常值方法:
LOF:Local Outlier Factor 局部异常因子,这种算法从K最近邻启发而来。

这里不重复造轮子了,详情看下列博客链接:
https://blog.csdn.net/wangyibo0201/article/details/51705966  异常点/离群点检测算法——LOF
http://blog.sina.com.cn/s/blog_ab089a840102ylin.html 三种基本的聚类算法以及基于LOF的异常点确定


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值