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的异常点确定


你可能感兴趣的:(机器学习)