一文带你读懂异常检测(更新中)
什么是异常检测
异常检测(Outlier Detection),顾名思义,是识别与正常数据不同的数据,与预期行为差异大的数据。
识别如信用卡欺诈,工业生产异常,网络流里的异常(网络侵入)等问题,针对的是少数的事件。
异常的类别
点异常(point anomalies)指的是少数个体实例是异常的,大多数个体实例是正常的,例如正常人与病人的健康指标;
条件异常(conditional anomalies),又称上下文异常,指的是在特定情境下个体实例是异常的,在其他情境下都是正常的,例如在特定时间下的温度突然上升或下降,在特定场景中的快速信用卡交易;
群体异常(group anomalies)指的是在群体集合中的个体实例出现异常的情况,而该个体实例自身可能不是异常,在入侵或欺诈检测等应用中,离群点(这个指的就是有问题的点)对应于多个数据点的序列,而不是单个数据点。例如社交网络中虚假账号形成的集合作为群体异常子集,但子集中的个体节点可能与真实账号一样正常。
异常检测任务分类
有监督:训练集的正例和反例均有标签
无监督:训练集无标签
半监督:在训练集中只有正例,异常实例不参与训练
ps:标签指的是最终结果上给出的一些属性(要求的),特征指的是求解标签中所用的一些样本所有的一些特征
异常检测场景
- 故障检测:主要是监控系统,在故障发生时可以识别,并且准确指出故障的种类以及出现位置。主要应用领域包括银行欺诈、移动蜂窝网络故障、保险欺诈、医疗欺诈。
- 医疗日常检测:在许多医疗应用中,数据是从各种设备收集的,如磁共振成像(MRI)扫描、正电子发射断层扫描(PET)扫描或心电图(ECG)时间序列。这些数据中的异常模式通常反映疾病状况。
- 网络入侵检测:在许多计算机系统中,都会收集有关操作系统调用、网络流量或其他用户操作的不同类型的数据。由于恶意活动,此数据可能显示异常行为。对此类活动的识别称为入侵检测。
- 欺诈检测:信用卡欺诈越来越普遍,因为信用卡号码等敏感信息更容易被泄露。在许多情况下,未经授权使用信用卡可能表现出不同的模式,例如从特定地点疯狂购买或进行非常大的交易。这种模式可用于检测信用卡交易数据中的异常值。
- 工业异常检测
- 时间序列异常检测
- 视频异常检测
- 日志异常检测
异常检测的难点
1.数据量少。异常检测任务通常情况下负样本(异常样本)是比较少的,有时候依赖于人工标签,属于样本不平衡问题。
2.噪音。异常和噪音有时候很难分清,如下图,图a的A点位于数据的稀疏区域,与其他数据非常不同,因此可以断定为异常,但是像图b的A点,周围有也有很多点分布,我们很难把A点识别出来。
异常检测方法
基础方法
基于统计学的方法
统计学方法对数据的正常性做出假定。**它们假定正常的数据对象由一个统计模型产生,而不遵守该模型的数据是异常点。**统计学方法的有效性高度依赖于对给定数据所做的统计模型假定是否成立。
异常检测的统计学方法的一般思想是:学习一个拟合给定数据集的生成模型,然后识别该模型低概率区域中的对象,把它们作为异常点。
即利用统计学方法建立一个模型,然后考虑对象有多大可能符合该模型。
假定输入数据集为x(1),x(2),...,x(m){x^{(1)}, x^{(2)}, ..., x^{(m)}}x(1),x(2),...,x(m),数据集中的样本服从正态分布,即x(i)∼N(μ,σ2)x^{(i)}\sim N(\mu, \sigma^2)x(i)∼N(μ,σ2),我们可以根据样本求出参数μ\muμ和σ\sigmaσ。
μ=1m∑i=1mx(i)\mu=\frac 1m\sum_{i=1}^m x^{(i)}μ=m1∑i=1mx(i)
σ2=1m∑i=1m(x(i)−μ)2\sigma^2=\frac 1m\sum_{i=1}^m (x^{(i)}-\mu)^2σ2=m1∑i=1m(x(i)−μ)2
线性模型
引言
真实数据集中不同维度的数据通常具有高度的相关性,这是因为不同的属性往往是由相同的基础过程以密切相关的方式产生的。在古典统计学中,这被称为——回归建模,一种参数化的相关性分析。
一类相关性分析试图通过其他变量预测单独的属性值,另一类方法用一些潜在变量来代表整个数据。前者的代表是 线性回归,后者一个典型的例子是 主成分分析。本文将会用这两种典型的线性相关分析方法进行异常检测。
ps:线性回归:指的并不是传统意义上的线性模型,而是指的因变量和自变量之间具有一定的关系,可以通过一些系数,使得因变量可由自变量来表示。
主成分分析:指的是通过降维的手段,将多个自变量中对因变量影响较大的转换成新的变量,即称为前文中的潜在变量,而对因变量影响较小的,进行舍弃或者其他处理
需要明确的是,这里有两个重要的假设:
假设一:近似线性相关假设。线性相关假设是使用两种模型进行异常检测的重要理论基础。
假设二:子空间假设。子空间假设认为数据是镶嵌在低维子空间中的,线性方法的目的是找到合适的低维子空间使得异常点(o)在其中区别于正常点(n)。
基于这两点假设,在异常检测的第一阶段,为了确定特定的模型是否适合特定的数据集,对数据进行探索性和可视化分析是非常关键的。
线性回归
在线性回归中,我们假设不同维度的变量具有一定的相关性,并可以通过一个相关系数矩阵进行衡量。因此对于特定的观测值,可以通过线性方程组来建模。在实际应用中,观测值的数量往往远大于数据的维度,导致线性方程组是一个超定方程,不能直接求解。因此需要通过优化的方法,最小化模型预测值与真实数据点的误差。
线性回归是统计学中一个重要的应用,这个重要的应用往往是指通过一系列自变量去预测一个特殊因变量的值。在这种情况下,异常值是根据其他自变量对因变量的影响来定义的,而自变量之间相互关系中的异常则不那么重要。这里的异常点检测主要用于数据降噪,避免异常点的出现对模型性能的影响,因而这里关注的兴趣点主要是正常值(n)。
而我们通常所说的异常检测中并不会对任何变量给与特殊对待,异常值的定义是基于基础数据点的整体分布,这里我们关注的兴趣点主要是异常值(o)。
广义的回归建模只是一种工具,这种工具既可以用来进行数据降噪也可以进行异常点检测。
基于自变量与因变量的线性回归
最小二乘法
为了简单起见,这里我们一元线性回归为例:
Y=∑i=1dai⋅Xi+ad+1Y=\sum_{i=1}^{d} a_{i} \cdot X_{i}+a_{d+1}Y=i=1∑dai⋅Xi+ad+1
变量Y为因变量,也就是我们要预测的值;X1...XdX_{1}...X_{d}X1...Xd为一系列因变量,也就是输入值。系数a1...ad+1a_{1}...a_{d+1}a1...ad+1为要学习的参数。假设数据共包含NNN个样本,第jjj个样本包含的数据为xj1...xjdx_{j1}...x_{jd}xj1...xjd和yjy_{j}yj,带入式(1)如下式所示:
yj=∑i=1dai⋅xji+ad+1+ϵjy_{j}=\sum_{i=1}^{d} a_{i} \cdot x_{j i}+a_{d+1}+\epsilon_{j}yj=i=1∑dai⋅xji+ad+1+ϵj
这里ϵj\epsilon_{j}ϵj为第jjj个样本的误差。以YYY 代表 N×1N \times 1N×1 的因变量矩阵(y1...yN)T{(y_{1}...y_{N})}^{T}(y1...yN)T,即样本中的真实值;以UUU代表N×(d+1)N \times (d+1)N×(d+1)的自变量矩阵,其中第jjj行为(xj1...xjd,1)(x_{j1}...x_{jd}, 1)(xj1...xjd,1);以AAA 代表 (d+1)×1(d+1) \times 1(d+1)×1 的系数矩阵(a1...ad+1)T(a_{1}...a_{d+1})^{T}(a1...ad+1)T。则模型可表示为: f(U,A)=U⋅Af(U, A) = U \cdot Af(U,A)=U⋅A
定义目标函数为:
L(A)=12∣Y−U⋅A∣2L(A) = \frac{1}{2}{\left| {Y - U \cdot A} \right|^2} L(A)=21∣Y−U⋅A∣2
目标函数是关于AAA的凸函数,其对AAA求偏导为:
∂L(A)∂A=12∂∣Y−U⋅A∣2∂A=−UT(Y−U⋅A)\frac{{\partial L(A)}}{{\partial A}} = \frac{1}{2}\frac{{\partial {{\left| {Y - U \cdot A} \right|}^2}}}{{\partial A}} = - {U^T}(Y - U \cdot A)∂A∂L(A)=21∂A∂∣Y−U⋅A∣2=−UT(Y−U⋅A)
令∂L(A)∂A=0\frac{{\partial L(A)}}{{\partial A}}=0∂A∂L(A)=0,得到最优参数为:
A=(UT⋅U)−1⋅(UT⋅Y)A=\left(U^{T} \cdot U\right)^{-1} \cdot\left(U^{T} \cdot Y\right)A=(UT⋅U)−1⋅(UT⋅Y)
这种求解线性回归参数的方法也叫最小二乘法。
最小二乘法要求矩阵 UT⋅UU^{T} \cdot UUT⋅U 可逆,即UT⋅UU^{T} \cdot UUT⋅U是满秩的。当UT⋅UU^{T} \cdot UUT⋅U不可逆时可以通过两种方法进行参数估计,一种先使用主成分分析等方法来预处理数据,消除不同特征之间的相关性,然后再使用最小二乘法。第二种方法是使用梯度下降法。
典型的如PCA方法,Principle Component Analysis是主成分分析,简称PCA。它的应用场景是对数据集进行降维。降维后的数据能够最大程度地保留原始数据的特征(以数据协方差为衡量标准)。其原理是通过构造一个新的特征空间,把原数据映射到这个新的低维空间里。PCA可以提高数据的计算性能,并且缓解"高维灾难"。
基于邻近度的方法
这类算法适用于数据点的聚集程度高、离群点较少的情况。同时,因为相似度算法通常需要对每一个数据分别进行相应计算,所以这类算法通常计算量大,不太适用于数据量大、维度高的数据。
基于相似度的检测方法大致可以分为三类:
基于集群(簇)的检测,如DBSCAN等聚类算法。
聚类算法是将数据点划分为一个个相对密集的“簇”,而那些不能被归为某个簇的点,则被视作离群点。这类算法对簇个数的选择高度敏感,数量选择不当可能造成较多正常值被划为离群点或成小簇的离群点被归为正常。因此对于每一个数据集需要设置特定的参数,才可以保证聚类的效果,在数据集之间的通用性较差。聚类的主要目的通常是为了寻找成簇的数据,而将异常值和噪声一同作为无价值的数据而忽略或丢弃,在专门的异常点检测中使用较少。基于距离的度量,如k近邻算法。
k近邻算法的基本思路是对每一个点,计算其与最近k个相邻点的距离,通过距离的大小来判断它是否为离群点。在这里,离群距离大小对k的取值高度敏感。如果k太小(例如1),则少量的邻近离群点可能导致较低的离群点得分;如果k太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使模型更加稳定,距离值的计算通常使用k个最近邻的平均距离。
基于密度的度量,如LOF(局部离群因子)算法。
局部离群因子(LOF)算法与k近邻类似,不同的是它以相对于其邻居的局部密度偏差而不是距离来进行度量。它将相邻点之间的距离进一步转化为“邻域”,从而得到邻域中点的数量(即密度),认为密度远低于其邻居的样本为异常值。
集成方法
集成是提高数据挖掘算法精度的常用方法。集成方法将多个算法或多个基检测器的输出结合起来。其基本思想是一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。集成方法与基于子空间方法有着天然的相似性,子空间与不同的点集相关,而集成方法使用基检测器来探索不同维度的子集,将这些基学习器集合起来。
常用的集成方法有Feature bagging,孤立森林等。
**feature bagging **:
与bagging法类似,只是对象是feature。
孤立森林
孤立森林假设我们用一个随机超平面来切割数据空间,切一次可以生成两个子空间。然后我们继续用随机超平面来切割每个子空间并循环,直到每个子空间只有一个数据点为止。直观上来讲,那些具有高密度的簇需要被切很多次才会将其分离,而那些低密度的点很快就被单独分配到一个子空间了。孤立森林认为这些很快被孤立的点就是异常点。
用四个样本做简单直观的理解,d是最早被孤立出来的,所以d最有可能是异常。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f2klbeh1-1620736614672)(…/pic/异常检测_孤立森林.png)]
机器学习
在有标签的情况下,可以使用树模型(gbdt,xgboost等)进行分类,缺点是异常检测场景下数据标签是不均衡的,但是利用机器学习算法的好处是可以构造不同特征。
引用
https://github.com/datawhalechina/team-learning-data-mining/tree/master/AnomalyDetection
一文带你读懂异常检测(更新中)相关推荐
- 以太币转帐速度_燃起来吧!一文带你读懂以太坊网络中的Gas、Gas Fee、Gas Price、Gas...
曾用过区块链相关应用,不管是交易所.DApp 或是虚拟货币钱包的人,一定都听过矿工费(Gas Fee) 这个词.它是当你要在区块链网路发起一笔交易时,所要支付给矿工的一笔手续费.其实很容易理解,就好比 ...
- DNN、RNN、CNN.…..一文带你读懂这些绕晕人的名词
DNN.RNN.CNN.-..一文带你读懂这些绕晕人的名词 https://mp.weixin.qq.com/s/-A9UVk0O0oDMavywRGIKyQ 「撞脸」一直都是娱乐圈一大笑梗. 要是买 ...
- 一文带您读懂FCC、CE、CCC认证的区别
一文带您读懂FCC.CE.CCC认证的区别 参考资料:https://3g.k.sohu.com/t/n411629823 FCC认证,CE认证,CCC认证是产品认证中比较常见的几个认证,前两者经常有 ...
- 机器学习中为什么需要梯度下降_机器学习101:一文带你读懂梯度下降
原标题 | Machine Learning 101: An Intuitive Introduction to Gradient Descent 作者 | Thalles Silva 译者 | 汪鹏 ...
- 一文带你读懂HTTP协议的前世今生
点击上方蓝字关注我们 HTTP,Hypertext Transfer Protocol,超文本协议,是在万维网上传输文件(如文本.图形图像.声音.视频和其他多媒体文件)的规则集.如果web用户打开他们 ...
- 用程序员计算机算进制,一文带你读懂计算机进制
hi,大家好,我是开发者FTD.在我们的学习和工作中少不了与进制打交道,从出生开始上学,最早接触的就是十进制,当大家学习和使用计算机时候,我们又接触到了二进制.八进制以及十六进制.那么大家对进制的认识 ...
- 一文带你读懂“经典TRIZ”
本文承接上文<一文带第读懂TRIZ>,下面开始看第二个问题:什么是"经典TRIZ"? 很多书里都有对TRIZ的产生与发展的描述. 我个人在看了很多的书和文献以后,认为: ...
- 简单一文带你读懂Java变量的作用和三要素
Java变量的作用 不只是java,在其他的编程语言中变量的作用只有一个:存储值(数据) 在java中,变量本质上是一块内存区域,数据存储在java虚拟机(JVM)内存中 变量的三要素 变量的三要素分 ...
- 一文带你读懂感知机的前世今生(上)
一文带你读懂感知机的前世今生 前言 男女不分 什么是神经元 M-P神经元 全或无定律 McCulloch和Pitts 一种高度简化的模型 MP神经元和真值表 MP神经元的几何理解 后记 参考 前言 男 ...
最新文章
- “伪高管”是如何搞垮一个公司的?
- 3559A sdk卡
- c++ 异步下获取线程执行结果_异步编排(CompletableFuture异步调用)
- 利用PowerDesigner比较2个数据库
- 算法学习之快速排序的C语言实现
- 高德地图时间和实际差多少_独家揭秘:高德地图品牌升级背后的故事
- java web请求字符串处理_java web工作常用技能篇(三)-封装复杂请求对象2
- 【记忆化搜索】【线性化DP】滑雪 (ssl 1202/luogu 1434/pku 1088)
- 新入行程序员须知的8件事
- Safari new Date()
- 产品和运营,如何做好转化分析?
- javascript在IE和Firefox中兼容性问题
- FFMPEG 常用命令行
- 为SoC-FPGA添加TFT显示屏和USB键盘
- U盘安装CentOS 7解决方案 (fat系统文件4g限制)
- Android获取视频文件时长
- 小学计算机反思案例,小学教师教育事案例以及反思
- Elasticsearch方案管理 Spring Boot 和 Nginx 日志
- 戴尔微型计算机主机怎么拆,微型主机 Dell OptiPlex 3020M 简单开箱
- 31、查询 1990 年出生的学生名单