异常值检验的一些方法
异常值检验的一些方法
- 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)详细解释且配上代码运行实例
异常值检验的一些方法相关推荐
- outlier异常值检验原理和处理方法
outlier异常值检验原理和处理方法 参考文章: (1)outlier异常值检验原理和处理方法 (2)https://www.cnblogs.com/webRobot/p/10688059.html ...
- Python数据分析:异常值检验的两种方法 -- Z 分数 上下分位点(放入自写库,一行代码快速实现)
本文已在公众号 " 数据分析与商业实践 " 首发.关注一下~,更多商业数据分析案例源码等你来撩.后台回复 "异常值" ,即可获取本文的案例示范与包含详细注释的源 ...
- R语言︱异常值检验、离群点分析、异常值处理
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:异常值处理一般分为以下几个步骤:异常 ...
- 异常值检验(t分布查表)、方差分析
异常值检验 T-test 参考:1.ttest和ttest2 区别 2. ttest在 matlab 3.T test分布表 单侧 方差分析(ANOVA) Def: 方差分析(analysis of ...
- 数据清洗:异常值识别和处理方法
异常数据识别 异常数据是数据分布的常态,处于特定分布区域之外的数据通常会被定义为异常或"噪音".产生数据"噪音"的原因很多,例如业务运营操作.数据采集问题.数据 ...
- stata怎么判断是否存在异常值_利用统计方法,辨别和处理数据中的异常值
在建模时,清理数据样本非常重要,这样做可以确保观察结果充分代表问题.有时,数据集可能包含超出预期范围之外的极端值.这通常被称为异常值,通过理解甚至去除这些异常值,能够改进机器学习建模和模型技能. 在本 ...
- 数据分析之异常值检验的方法
一.基于分布的方法 1.3sigma 基于正态分布,3sigma准则认为超过3sigma的数据为异常点 def three_sigma(s):mu, std = np.mean(s), np.std( ...
- python异常值检测常见方法_outlier异常值检验原理和处理方法
Before we tackle how to handle them, let's quickly define what an outlier is. An outlier is any data ...
- 异常值 识别与处理方法
一.概念 异常值,指的是样本中的一些数值明显偏离其余数值的样本点,所以也称为离群点. 二.异常值判断 在不同的数据中,鉴别异常值有不同的标准,常规有以下几种: 1.数字超过某个标准值 这是最常用的异常 ...
- eviews如何处理缺失数据填补_python数据预处理之异常值、缺失值处理方法
数据预处理是明确分析目标与思路之后进行数据分析的第一步,也是整个项目中最基础.花费时间较长的工作.除了互联网埋点的数据或企业内部的业务数据之外,往往我们拿到的,比如说网上采集的数据并不是那样规整,这类 ...
最新文章
- Beyond Compare比较Word文件的方法
- Python除了人工智能,还能从事哪些工作?
- PHP常用 header函数设置HTTP头部示例
- v-for中用elementUI实现分页
- 如何和后台接触的_后台产品,不只是做支持
- 比较好玩的动态添加网页元素
- 1588: [HNOI2002]营业额统计 - BZOJ
- IT要发掘有价值应用
- 银联在线支付B2C UnionPay.NET
- leecode试题 178. 分数排名
- 超级简单的 RocketMQ 流量削峰实战
- [转]PCB Layout中的走线策略
- USB 之枚举过程概述
- FPGA控制ADS1256的ADC采集(三)
- 华为鸿蒙系统荣耀30s,华为鸿蒙操作系统2.0版支持的设备清单流出,荣耀30s
- PDF如何在线压缩?PDF在线压缩方法介绍
- openvz相关资料
- 【转载】优秀博文转载
- 【巧用dm工具解决硬盘低格问题】
- Python DayDayUp —— 小项目实现(二)
热门文章
- 电脑ps计算机磨皮,ps脸部磨皮教程
- 打印机显示服务器脱机是什么原因,脱机使用打印机是什么意思?脱机打印机状态显示错误怎么办...
- python就业方向那么广,为什么还是很多人找不到工作?
- 证券市场的法律法规体系
- 【服务器数据恢复】EMC Isilon存储误删除的数据恢复案例
- CSS3实现缺角矩形,缺角边框以及折角矩形
- ir2104s的自举电容_有关IR2104的自举电容和NMOS选择问题教程.docx
- 用LabVIEW开发简仪USB101数据采集卡会是怎样的?
- 加拿大高中课程计算机科学,加拿大高中课程
- 如何打开后缀为.xps的文件?