异常检测之正态分布

简介: 打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处:http://blog.csdn.net/gamer_gyt 博主微博:http://weibo.com/234654758 Github:https://github.com/thinkgamer一:异常检测概述1)引用维基百科在数据挖掘中,异常检测(英语:anomaly detection)对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。


这里写图片描述
打开微信扫一扫,关注微信公众号【数据与算法联盟】

转载请注明出处: http://blog.csdn.net/gamer_gyt
博主微博: http://weibo.com/234654758
Github: https://github.com/thinkgamer


一:异常检测概述

1)引用维基百科

在数据挖掘中,异常检测(英语:anomaly detection)对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。异常也被称为离群值、新奇、噪声、偏差和例外。

特别是在检测滥用与网络入侵时,有趣性对象往往不是罕见对象,但却是超出预料的突发活动。这种模式不遵循通常统计定义中把异常点看作是罕见对象,于是许多异常检测方法(特别是无监督的方法)将对此类数据失效,除非进行了合适的聚集。相反,聚类分析算法可能可以检测出这些模式形成的微聚类。

2)有三大类异常检测算法

在假设数据集中大多数实例都是正常的前提下
- 无监督异常检测方法能通过寻找与其他数据最不匹配的实例来检测出未标记测试数据的异常。
- 监督式异常检测方法需要一个已经被标记“正常”与“异常”的数据集,并涉及到训练分类器(与许多其他的统计分类问题的关键区别是异常检测的内在不均衡性)。
- 半监督式异常检测方法根据一个给定的正常训练数据集创建一个表示正常行为的模型,然后检测由学习模型生成的测试实例的可能性。

3)应用领域

异常检测技术用于各种领域,如入侵检测、欺诈检测、故障检测、系统健康监测、传感器网络事件检测和生态系统干扰检测等。它通常用于在预处理中删除从数据集的异常数据。在监督式学习中,去除异常数据的数据集往往会在统计上显著提升准确性。


二:正态分布

1)正态分布介绍

正态分布又名高斯分布,是一个在数学,物理以及工程等领域都非常重要的概率分布。由于这个分布函数有很多漂亮的性质,使得其在诸多设计统计科学离散科学等许多领域都有着重大的影响力。

若随机变量X服从一个位置参数为 μ 尺度参数为 σ 的概率分布,记为:

XN(μ,σ2)

则其概率密度函数为

f(x)=1σ2πe(xμ)22σ2

正态分布的数学期望值或期望值 μ 等于位置参数,决定了分布的位置;其方差 σ2 的开平方或标准差 σ 等于尺度参数,决定了分布的幅度。

2) 标准正态分布

μ = 0, σ =1 ,这个分布被称为标准正态分布,这个分布可以简化为:

f(x)=12πexp(x22)

不同参数的正态分布图:

这里写图片描述

3)正态分布中一些值得注意的量:

  • 密度函数关于平均值对称
  • 平均值与它的众数(statistical mode)以及中位数(median)同一数值。
  • 函数曲线下68.268949%的面积在平均数左右的一个标准差范围内。
  • 95.449974%的面积在平均数左右两个标准差 2 σ 的范围内。
  • 99.730020%的面积在平均数左右三个标准差 3 σ 的范围内。
  • 99.993666%的面积在平均数左右四个标准差 4 σ 的范围内。
  • 函数曲线的反曲点(inflection point)为离平均数一个标准差距离的位置。

更多基础资料参考WIKI :点击查看

三:异常点检测介绍

异常点检测(又称为离群点检测)是找出其行为很不同于预期对象的一个检测过程。这些对象被称为异常点或者离群点。异常点检测在很多实际的生产生活中都有着具体的应用,比如信用卡欺诈,工业损毁检测,图像检测等。

异常点(outlier)是一个数据对象,它明显不同于其他的数据对象,就好像它是被不同的机制产生的一样。例如下图红色的点,就明显区别于蓝色的点。相对于蓝色的点而言,红色的点就是异常点。

这里写图片描述

一般来说,进行异常点检测的方法有很多,最常见的就是基于统计学的方法。

1)基于正态分布的一元离群点检测方法

假设有 n 个点 (x1,...,xn) ,那么可以计算出这 n 个点的均值 μ 和方差 σ 。均值和方差分别被定义为:

μ=i=1nxi/n

σ2=i=1n(xiμ)2/n.

在正态分布的假设下,区域 μ±3σ 包含了99.7% 的数据,如果某个值距离分布的均值 μ 超过了 3σ ,那么这个值就可以被简单的标记为一个异常点(outlier)。

2)多元离群点的检测方法

涉及两个或者两个以上变量的数据称为多元数据,很多一元离群点的检测方法都可以扩展到高维空间中,从而处理多元数据。

(1) 基于一元正态分布的离群点检测方法

假设 n 维的数据集合形如 x⃗ i=(xi,1,...,xi,n),i{1,...,m} ,那么可以计算每个维度的均值和方差 μj,σj,j{1,...,n} . 具体来说,对于 j{1,...,n} ,可以计算

μj=i=1mxi,j/m

σ2j=i=1m(xi,jμj)2/m

在正态分布的假设下,如果有一个新的数据 x⃗  ,可以计算概率 p(x⃗ ) 如下:
p(x⃗ )=j=1np(xj;μj,σ2j)=j=1n12πσjexp((xjμj)22σ2j)

根据概率值的大小就可以判断 x 是否属于异常值。运用该方法检测到的异常点如图,红色标记为异常点,蓝色表示原始的数据点.

这里写图片描述

(2)多元高斯分布的异常点检测

假设 n 维的数据集合 x⃗ =(x1,...,xn) , 可以计算 n 维的均值向量

μ⃗ =(E(x1),...,E(xn))

n×n 的协方差矩阵:
Σ=[Cov(xi,xj)],i,j{1,...,n}

如果有一个新的数据 x⃗  ,可以计算
p(x⃗ )=1(2π)n2|Σ|12exp(12(x⃗ μ⃗ )TΣ1(x⃗ μ⃗ ))

根据概率值的大小就可以判断 x⃗  是否属于异常值。

(3)使用马氏 (Mahalanobis) 距离检测多元离群点

对于一个多维的数据集合 D,假设 a 是均值向量,那么对于数据集 D 中的其他对象 a,从 a 到 a 的 Mahalanobis 距离是

MDist(a,a)=(aa)TS1(aa),

其中 S 是协方差矩阵。

在这里, MDist(a,a) 是数值,可以对这个数值进行排序,如果数值过大,那么就可以认为点 a 是离群点。或者对一元实数集合 {MDist(a,a)|aD} 进行离群点检测,如果 MDist(a,a) 被检测为异常点,那么就认为 a 在多维的数据集合 D 中就是离群点。

运用 Mahalanobis 距离方法检测到的异常点如图,红色标记为异常点,蓝色表示原始的数据点。

这里写图片描述

(4)使用卡方( χ2 ) 统计量检测多元离群点

在正态分布的假设下, χ2 统计量可以用来检测多元离群点。对于某个对象 a χ2 统计量是

χ2=i=1n(aiEi)2/Ei.

其中, ai a 在第 i 维上的取值, Ei 是所有对象在第 i 维的均值,n 是维度。如果对象 a χ2 统计量很大,那么该对象就可以认为是离群点。

运用 χ2 统计量检测到的异常点如图,红色标记为异常点,蓝色表示原始的数据点。

这里写图片描述


参考:https://zr9558.com/2016/06/13/outlierdetectionone/

相关文章
|
负载均衡 前端开发 应用服务中间件
Nginx的作用是什么?有什么用?
Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的。由于其非常好用,渐渐被越来越多的人所接受。俄罗斯人的编程能力确实厉害。
560 0
|
运维 监控 Linux
Linux运维工程师笔试题系列1(30题)
Linux运维工程师笔试题系列1(30题) 如果您对问题有疑问,或者认为答案不准确的,欢迎留言交流。 问题如下: 1. Linux下,为某个脚本赋予可执行权限() A chmod +x filename.sh B chown +x filename.sh C chmod +r filename.sh D chown +r filename.sh 2. Linux文件系统的目录结构是一棵倒挂的树,文件都按其作用分门别类地放在相关的目录中。
3614 0
|
5月前
|
缓存 Java
自旋锁
自旋锁是一种轻量级同步机制,适用于多线程环境。其核心思想是线程在获取锁失败时不阻塞,而是通过忙等待(自旋)不断尝试获取锁,从而避免上下文切换的开销。常见实现依赖CAS原子操作,适用于锁持有时间短、并发度高的场景,如计数器更新或缓存操作。但长时间自旋会浪费CPU资源,因此更适合多核环境下使用。Java中可通过`AtomicBoolean`实现简单自旋锁,JVM也对其进行了自适应优化。合理使用可提升性能,但需注意控制自旋时间和竞争粒度。
195 0
|
6月前
|
机器学习/深度学习 数据采集 数据可视化
基于YOLOv8的PCB缺陷检测识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
本项目基于YOLOv8实现PCB缺陷检测,提供一站式解决方案。包含完整训练代码、标注数据集、预训练权重及PyQt5图形界面,支持图片、文件夹、视频和摄像头四种检测模式。项目开箱即用,适合科研、工业与毕业设计。核心功能涵盖模型训练、推理部署、结果保存等,检测类型包括缺孔、鼠咬缺口、开路、短路、飞线和杂铜。项目具备高性能检测、友好界面、灵活扩展及多输入源支持等优势,未来可优化模型轻量化、多尺度检测及报告生成等功能。
基于YOLOv8的PCB缺陷检测识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!
|
10月前
|
机器学习/深度学习 编解码 Java
RT-DETR改进策略【卷积层】| GnConv:一种通过门控卷积和递归设计来实现高效、可扩展、平移等变的高阶空间交互操作
RT-DETR改进策略【卷积层】| GnConv:一种通过门控卷积和递归设计来实现高效、可扩展、平移等变的高阶空间交互操作
417 13
RT-DETR改进策略【卷积层】| GnConv:一种通过门控卷积和递归设计来实现高效、可扩展、平移等变的高阶空间交互操作
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
2987 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
存储 Go API
一个go语言编码的例子
【7月更文挑战第2天】本文介绍Go语言使用Unicode字符集和UTF-8编码。Go中,`unicode/utf8`包处理编码转换,如`EncodeRune`和`DecodeRune`。`golang.org/x/text`库支持更多编码转换,如GBK到UTF-8。编码规则覆盖7位至21位的不同长度码点。
407 1
一个go语言编码的例子
|
消息中间件 存储 缓存
深入理解Kafka核心设计及原理(二):生产者
深入理解Kafka核心设计及原理(二):生产者
226 8
|
机器学习/深度学习 人工智能 算法
【人工智能】传统语音识别算法概述,应用场景,项目实践及案例分析,附带代码示例
传统语音识别算法是将语音信号转化为文本形式的技术,它主要基于模式识别理论和数学统计学方法。以下是传统语音识别算法的基本概述
999 2
|
机器学习/深度学习 编解码 计算机视觉
深度学习笔记(十一):各种特征金字塔合集
这篇文章详细介绍了特征金字塔网络(FPN)及其变体PAN和BiFPN在深度学习目标检测中的应用,包括它们的结构、特点和代码实现。
1932 0

热门文章

最新文章