异常值检验的一些方法

  • 1.局部离群因子检测(LOF)
  • 2.MADe法
  • 3.修正的Z得分法
  • 4.boxplot法
  • 5.修正的boxplot法
  • 6.异常检测之孤立森林算法详细解释且配上代码运行实例
  • 7.异常检测之基于聚类的局部异常因子检测算法(CBLOF)详细解释且配上代码运行实例

1.局部离群因子检测(LOF)

LOF算法对数据分布假设没什么要求,能够量化每个数据点的异常程度,是一种基于密度的检测异常值的方法。LOF算法认为非离群点对象周围的密度与其邻域周围的密度类似,而离群点对象周围的密度显著不同于其邻域周围的密度。其核心思想就是看局部的密度与周围的密度相比较,如果局部密度相对稀疏,则可认为是离群值,即异常值。
具体可以参考一文读懂异常检测 LOF 算法(Python代码)讲的还是比较清楚的。

调用sklearn可以较快的实现:

from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.neighbors import LocalOutlierFactor
from sklearn.decomposition import PCA
# 导入鸢尾花的数据集
iris = datasets.load_iris()
# PCA降维至2维
X = PCA(n_components=2).fit_transform(iris.data)
# 定义一个LOF模型,contamination能够自己定义异常比例,默认自动选取
model = LocalOutlierFactor(n_neighbors=10)
# 训练模型
model.fit(X)
# 预测模型
# 这里是训练数据中就包含着异常值的话,那么适用训练时novelty默认为False,给训练数据打标签使用fit_predict(x)
y = model.fit_predict(X)  # 若样本点正常,返回1,不正常,返回-1# 可视化预测结果
plt.scatter(X[:, 0], X[:, 1], c=y)  # 样本点的颜色由y值决定
plt.show()

黑色的点即为检测出的异常值。

2.MADe法

from sklearn import datasets
import pandas as pd
import numpy as np
iris = datasets.load_iris()
X = iris.data[:, 0]  # 换成需要检测的一维数据即可
X = pd.DataFrame(X)
col = 0  # 需要检验的dataframe的列
M = X[col].median()
MAD = (np.abs(X[col] - X[col].median())).median()
down = M - 3 * MAD * 1.483
up = M + 3 * MAD * 1.483
error = X[(X[col] < down) | (X[col] > up)]
print(down)
print(up)
if len(error) == 0:print("此方法未检测出异常值")
else:print(error)

运行结果

3.修正的Z得分法

from sklearn import datasets
import pandas as pd
import numpy as np
iris = datasets.load_iris()
X = iris.data[:, 0]  # 换成需要检测的一维数据即可
X = pd.DataFrame(X)
col = 0
MAD = (np.abs(X[col] - X[col].median())).median()
M = np.abs(0.6745 * (X[col] - X[col].median()) / MAD)
if len(M[M > 3.5]) == 0:print("检测无异常值")
else:print(M[M > 3.5])


说明此方法在此数据中没有检测出异常值

4.boxplot法


import numpy as np
from statsmodels.stats.stattools import medcouple
import pandas as pd
np.random.seed(0)
data = np.random.rand(10000)
data[0] = data[0] * 3
data = pd.DataFrame(data)
col = 0  # 所选需要检验的dataframe的列
des = data[col].describe()Q1 = des.loc["25%"]
Q3 = des.loc["75%"]
IQR = Q3 - Q1I_L = Q1 - 1.5 * IQR
I_U = Q3 + 1.5 * IQRO_L = Q1 - 3 * IQR
O_U = Q3 + 3 * IQRerror = data[(data[col] < O_L) | (data[col] > O_U)]
error_may = data[((data[col] > O_L) & (data[col] < I_L)) | ((data[col] < O_U) & (data[col] > I_U))]
if len(error) == 0 and len(error_may) == 0:print("未检测出异常值")
if len(error_may) != 0:print("可能为异常值:")print(error_may)
if len(error) != 0:print("检测出异常值为")print(error)

结果

5.修正的boxplot法

import numpy as np
from statsmodels.stats.stattools import medcouple
import pandas as pd
np.random.seed(0)
data = np.random.rand(10000)
data[0] = data[0] * 3data = pd.DataFrame(data)
col = 0
if len(data[col]) > 10000:  # 大于10000就抽样计算估计数据的MCsamples = data[col].sample(n=10000)
else:samples = data[col]MC = medcouple(samples)
des = data[col].describe()Q1 = des.loc["25%"]
Q3 = des.loc["75%"]
IQR = Q3 - Q1L = 0
U = 0
if MC >= 0:L = Q1 - 1.5 * np.exp(-3.5 * MC) * IQRU = Q3 + 1.5 * np.exp(4 * MC) * IQR
else:L = Q1 - 1.5 * np.exp(-4 * MC) * IQRU = Q3 + 1.5 * np.exp(3.5 * MC) * IQRprint(L)
print(U)error = data[(data[col] < L) | (data[col] > U)]
if len(error) == 0:print("未检测出异常值")
else:print("检测出的异常值为")print(error)

结果

6.异常检测之孤立森林算法详细解释且配上代码运行实例

详见我的另一篇博客
异常检测之孤立森林算法详细解释且配上代码运行实例

7.异常检测之基于聚类的局部异常因子检测算法(CBLOF)详细解释且配上代码运行实例

详见我的另一篇博客
异常检测之基于聚类的局部异常因子检测算法(CBLOF)详细解释且配上代码运行实例

异常值检验的一些方法相关推荐

  1. outlier异常值检验原理和处理方法

    outlier异常值检验原理和处理方法 参考文章: (1)outlier异常值检验原理和处理方法 (2)https://www.cnblogs.com/webRobot/p/10688059.html ...

  2. Python数据分析:异常值检验的两种方法 -- Z 分数 上下分位点(放入自写库,一行代码快速实现)

    本文已在公众号 " 数据分析与商业实践 " 首发.关注一下~,更多商业数据分析案例源码等你来撩.后台回复 "异常值" ,即可获取本文的案例示范与包含详细注释的源 ...

  3. R语言︱异常值检验、离群点分析、异常值处理

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:异常值处理一般分为以下几个步骤:异常 ...

  4. 异常值检验(t分布查表)、方差分析

    异常值检验 T-test 参考:1.ttest和ttest2 区别 2. ttest在 matlab 3.T test分布表 单侧 方差分析(ANOVA) Def: 方差分析(analysis of ...

  5. 数据清洗:异常值识别和处理方法

    异常数据识别 异常数据是数据分布的常态,处于特定分布区域之外的数据通常会被定义为异常或"噪音".产生数据"噪音"的原因很多,例如业务运营操作.数据采集问题.数据 ...

  6. stata怎么判断是否存在异常值_利用统计方法,辨别和处理数据中的异常值

    在建模时,清理数据样本非常重要,这样做可以确保观察结果充分代表问题.有时,数据集可能包含超出预期范围之外的极端值.这通常被称为异常值,通过理解甚至去除这些异常值,能够改进机器学习建模和模型技能. 在本 ...

  7. 数据分析之异常值检验的方法

    一.基于分布的方法 1.3sigma 基于正态分布,3sigma准则认为超过3sigma的数据为异常点 def three_sigma(s):mu, std = np.mean(s), np.std( ...

  8. python异常值检测常见方法_outlier异常值检验原理和处理方法

    Before we tackle how to handle them, let's quickly define what an outlier is. An outlier is any data ...

  9. 异常值 识别与处理方法

    一.概念 异常值,指的是样本中的一些数值明显偏离其余数值的样本点,所以也称为离群点. 二.异常值判断 在不同的数据中,鉴别异常值有不同的标准,常规有以下几种: 1.数字超过某个标准值 这是最常用的异常 ...

  10. eviews如何处理缺失数据填补_python数据预处理之异常值、缺失值处理方法

    数据预处理是明确分析目标与思路之后进行数据分析的第一步,也是整个项目中最基础.花费时间较长的工作.除了互联网埋点的数据或企业内部的业务数据之外,往往我们拿到的,比如说网上采集的数据并不是那样规整,这类 ...

最新文章

  1. Beyond Compare比较Word文件的方法
  2. Python除了人工智能,还能从事哪些工作?
  3. PHP常用 header函数设置HTTP头部示例
  4. v-for中用elementUI实现分页
  5. 如何和后台接触的_后台产品,不只是做支持
  6. 比较好玩的动态添加网页元素
  7. 1588: [HNOI2002]营业额统计 - BZOJ
  8. IT要发掘有价值应用
  9. 银联在线支付B2C UnionPay.NET
  10. leecode试题 178. 分数排名
  11. 超级简单的 RocketMQ 流量削峰实战
  12. [转]PCB Layout中的走线策略
  13. USB 之枚举过程概述
  14. FPGA控制ADS1256的ADC采集(三)
  15. 华为鸿蒙系统荣耀30s,华为鸿蒙操作系统2.0版支持的设备清单流出,荣耀30s
  16. PDF如何在线压缩?PDF在线压缩方法介绍
  17. openvz相关资料
  18. 【转载】优秀博文转载
  19. 【巧用dm工具解决硬盘低格问题】
  20. Python DayDayUp —— 小项目实现(二)

热门文章

  1. 电脑ps计算机磨皮,ps脸部磨皮教程
  2. 打印机显示服务器脱机是什么原因,脱机使用打印机是什么意思?脱机打印机状态显示错误怎么办...
  3. python就业方向那么广,为什么还是很多人找不到工作?
  4. 证券市场的法律法规体系
  5. 【服务器数据恢复】EMC Isilon存储误删除的数据恢复案例
  6. CSS3实现缺角矩形,缺角边框以及折角矩形
  7. ir2104s的自举电容_有关IR2104的自举电容和NMOS选择问题教程.docx
  8. 用LabVIEW开发简仪USB101数据采集卡会是怎样的?
  9. 加拿大高中课程计算机科学,加拿大高中课程
  10. 如何打开后缀为.xps的文件?