异常检测-Task2

异常检测-Task2

记录DataWhale的异常检测的学习过程,使用的教材可以在此链接中下载。
Task2介绍的是传统的基于统计方法的异常检测算法,主要可以分为两类,第一类是参数方法,介绍的是使用高斯分布对数据进行建模;第二类是非参数方法,介绍了Histogram-based Outlier Score(HBOS)算法[1]。最后介绍的一个HBOS算法的实例。

统计方法概述

统计方法做异常检测的思路是:正常的数据对象由一个概率模型产生,而不符合该模型概率分布的数据是异常点。统计方法可以分为参数方法和非参数方法两种,参数方法是先假定一个先验的概率分布 P θ ( x ) P_\theta(x) Pθ(x)对数据进行建模,然后利用极大似然法确定 P θ ( x ) P_\theta(x) Pθ(x)中未知的参数 θ \theta θ,模型建模就完成了。将新的数据 x x x代入 P θ ( x ) P_\theta(x) Pθ(x),若值很小,说明 x x x在该概率模型下出现的概率小,可以判定为异常点。
非参数方法也是从数据中进行建模,但是没有指定先验的概率模型。

基于高斯分布的参数方法

高斯分布由于各种优良的性质一直被广泛使用,所以我们这里介绍以高斯分布为代表的参数方法。在实际中,也可以根据数据的特性选择其他更适合的先验分布模型。在本文中,我们简单介绍常用的多元高斯分布和高斯混合分布对数据进行建模(其实就是利用极大似然估计确定高斯模型的参数)。

多元高斯分布

无标签的数据集 D = { x 1 , x 2 ⋯ x m } D=\{\boldsymbol{x_1},\boldsymbol{x_2}\cdots\boldsymbol{x_m}\} D={x1,x2xm},其中 x i ∈ R d \boldsymbol{x_i}\in\mathbb R^d xiRd,共有 m m m个样本。我们假设数据服从多元高斯分布: x i ∼ N ( μ , ∑ ) \boldsymbol{x_i}\sim \mathcal{N}(\boldsymbol{\mu},\sum) xiN(μ,),此时需要从数据集中估计出参数 ( μ , ∑ ) (\boldsymbol{\mu},\sum) (μ,),假设所有样本独立同分布,由于极大似然估计法可易得:

μ = 1 m ∑ i = 1 m x i \boldsymbol{\mu}=\frac{1}{m} \sum_{i=1}^{m} \boldsymbol{x_i} μ=m1i=1mxi

∑ = 1 m ∑ i = 1 m ( x i − μ ) ( x i − μ ) T \sum=\frac{1}{m} \sum_{i=1}^{m}\left(\boldsymbol{x_i}-\boldsymbol{\mu}\right)\left(\boldsymbol{x_i}-\boldsymbol{\mu}\right)^{T} =m1i=1m(xiμ)(xiμ)T

根据 ( μ , ∑ ) (\boldsymbol{\mu},\sum) (μ,)的值,我们可以得到高斯分布的概率密度函数:

p ( x ) = 1 ( 2 π ) d 2 ∣ Σ ∣ 1 2 exp ⁡ ( − 1 2 ( x i − μ ) T Σ − 1 ( x i − μ ) ) p(\boldsymbol{x})=\frac{1}{(2 \pi)^{\frac{d}{2}}|\Sigma|^{\frac{1}{2}}} \exp \left(-\frac{1}{2}(\boldsymbol{x_i}-\boldsymbol{\mu})^{T} \Sigma^{-1}(\boldsymbol{x_i}-\boldsymbol{\mu})\right) p(x)=(2π)2dΣ211exp(21(xiμ)TΣ1(xiμ))

进行异常检测时,将样本 x i \boldsymbol{x_i} xi代入上面的公式,设置一个阈值,结果低于阈值的当作异常点。

高斯混合模型

教材上说当实际数据很复杂时,可以假定数据是被混合参数分布产生的。不知道这个混合参数分布是什么意思,我感觉应该是类似高斯混合分布(GMM)的模型吧,这里简单介绍一下GMM模型,关于GMM的详细数学推导可以参考知乎上的这篇文章,文章中对GMM公式的推导写的很详细,本文下面的内容也主要参考了这篇文章。

GMM模型假设真实分布由 K K K个高斯分布线性组合而成,每一个高斯模型都有各自的 ( μ , ∑ ) (\boldsymbol{\mu},\sum) (μ,)值,同时引入了一个新的参数 π k \pi_{k} πk,表示第 k k k个子模型在GMM中的占比,GMM模型的概率密度函数定义为:

p ( x ) = ∑ k = 1 K π k N ( x ∣ μ k , Σ k ) p(\boldsymbol{x})=\sum_{k=1}^{K} \pi_{k} \mathcal{N}\left(\boldsymbol{x} \mid \boldsymbol{\mu}_{k}, \boldsymbol{\Sigma}_{k}\right) p(x)=k=1KπkN(xμk,Σk)

我们同样可以使用极大似然估计方法对未知参数进行求解,先得到似然函数:

L ( π , μ , Σ ) = ∑ i = 1 m ln ⁡ [ ∑ k = 1 K π k N ( x i ∣ μ k , Σ k ) ] L(\boldsymbol{\pi}, \boldsymbol{\mu}, \boldsymbol{\Sigma})=\sum_{i=1}^{m} \ln \left[\sum_{k=1}^{K} \pi_{k} \mathcal{N}\left(\boldsymbol{x}_{i} \mid \boldsymbol{\mu}_{k}, \boldsymbol{\Sigma}_{k}\right)\right] L(π,μ,Σ)=i=1mln[k=1KπkN(xiμk,Σk)]

继续极大似然估计法的步骤,求三个方程:

∂ L ( π , μ , Σ ) ∂ μ k = 0 \frac{\partial L(\boldsymbol{\pi}, \boldsymbol{\mu}, \boldsymbol{\Sigma})}{\partial \boldsymbol{\mu}_{k}}=0 μkL(π,μ,Σ)=0

∂ L ( π , μ , Σ ) ∂ ∑ k = 0 \frac{\partial L(\boldsymbol{\pi}, \boldsymbol{\mu}, \boldsymbol{\Sigma})}{\partial \boldsymbol{\sum}_{k}}=0 kL(π,μ,Σ)=0

∂ L ( π , μ , Σ ) ∂ π k = 0 \frac{\partial L(\boldsymbol{\pi}, \boldsymbol{\mu}, \boldsymbol{\Sigma})}{\partial {\pi}_{k}}=0 πkL(π,μ,Σ)=0

为了更方便解以上三个式子,还需引入一个新的变量: γ j k \gamma_{j k} γjk γ j k \gamma_{j k} γjk表示的是第 j j j个观测数据 x j \boldsymbol{x_j} xj由第 k k k个子模型生成的概率, γ j k \gamma_{j k} γjk的取值与 π , μ , Σ \boldsymbol{\pi}, \boldsymbol{\mu}, \boldsymbol{\Sigma} π,μ,Σ有关,用公式表达为:
γ j k = π k N ( x j ∣ μ k , Σ k ) ∑ i = 1 K π i N ( x j ∣ μ i , Σ i ) \gamma_{j k}= \frac{\pi_{k} \mathcal{N}\left(\boldsymbol{x}_{j} \mid \boldsymbol{\mu}_{k}, \boldsymbol{\Sigma}_{k}\right)}{\sum_{i=1}^{K} \pi_{i} \mathcal{N}\left(\boldsymbol{x}_{j} \mid \boldsymbol{\mu}_{i}, \boldsymbol{\Sigma}_{i}\right)} γjk=i=1KπiN(xjμi,Σi)πkN(xjμk,Σk)
这里的 π k \pi_{k} πk表示第 k k k个子模型在GMM中的占比,也可以看作在所有可能的样本中,由第 k k k个模型生成的样本个数占总体样本个数的比例。引入 γ j k \gamma_{j k} γjk解决极大似然估计中的三个方程,得:

μ k = ∑ j = 1 m ( γ j k x j ) ∑ j = 1 m γ j k \boldsymbol{\mu}_{k}=\frac{\sum_{j=1}^{m}\left(\gamma_{j k} \boldsymbol{x}_{j}\right)}{\sum_{j=1}^{m} \gamma_{j k}} μk=j=1mγjkj=1m(γjkxj)

Σ k = ∑ j = 1 m γ j k ( x j − μ k ) ( x j − μ k ) T ∑ j = 1 m γ j k \boldsymbol{\Sigma}_{k}=\frac{\sum_{j=1}^{m} \gamma_{j k}\left(\boldsymbol{x}_{j}-\boldsymbol{\mu}_{k}\right)\left(\boldsymbol{x}_{j}-\boldsymbol{\mu}_{k}\right)^{T}}{\sum_{j=1}^{m} \gamma_{j k}} Σk=j=1mγjkj=1mγjk(xjμk)(xjμk)T

π k = ∑ j = 1 m γ j k m \pi_{k}=\frac{\sum_{j=1}^{m} \gamma_{j k}}{m} πk=mj=1mγjk

但问题至此并没有结束,我们不能像普通极大似然法一样直接根据方程的解得到 π k , μ k , Σ k \pi_k, \boldsymbol{\mu_k}, \boldsymbol{\Sigma_k} πk,μk,Σk 的值,因为由方程解的形式可得,未知数 π k , μ k , Σ k \pi_k, \boldsymbol{\mu_k}, \boldsymbol{\Sigma_k} πk,μk,Σk 的取值都与 γ j k \gamma_{j k} γjk相关,而 γ j k \gamma_{j k} γjk又是 π , μ , Σ \boldsymbol{\pi}, \boldsymbol{\mu}, \boldsymbol{\Sigma} π,μ,Σ的函数,成了一个先有鸡还是先有蛋的问题了,对于这种问题,我们通常使用EM 算法解决,关于EM的具体原理和算法流程,可以参考李航老师的《统计学习方法》,这里就不过多介绍了。使用EM算法后,可以得到GMM模型的参数估计,进而也就确定了GMM模型的概率密度函数,接下来判断异常点的流程和简单的多元高斯分布采用的方法一样。

非参数方法-HOSS算法

算法思想

非参数方法中主要介绍了基于直方图统计的HOSS算法,HOSS算法的基本假设是基本假设是数据集的特征间相互独立,不考虑特征间的相关性。HOSS算法对样本的每个维度分别进行区间划分,将归一化后的区间的高度作为概率,然后就是常规操作了,将概率值低的点视为异常值,不过HOSS引入了一个异常评分,异常值分数越高说明越可能是异常点,具体做法也很简单,这里我们只考虑一个维度上的结果,不是概率越小越可能是异常点嘛,就先把概率值取一个 l o g log log,将概率值由[0,1]区间放大到( − ∞ , 0 ] -\infty,0] ,0],再取一个负号就可以了当作异常评分了,扩展到多个维度,也很简单,因为不考虑维度间的相关性,直接将每个维度的异常评分加起来就是一个多维样本的异常值评分。
用数学语言来描述就是,一个 d d d维的样本 x \boldsymbol{x} x,其异常值评分记作 H O S S ( x ) HOSS(\boldsymbol{x}) HOSS(x),有:
H O S S ( x ) = ∑ i = 1 d 1 log ⁡ ( P i ( x ) ) HOSS(\boldsymbol{x})=\sum_{i=1}^{d} \frac{1}{\log \left(P_{i}(\boldsymbol{x})\right)} HOSS(x)=i=1dlog(Pi(x))1
其中, P i ( x ) P_{i}(\boldsymbol{x}) Pi(x)指的是样本 x \boldsymbol{x} x的第 i i i维的概率,就是在直方图上落在的那个区间的归一化的高度。

直方图划分

直方图的生成对结果有很大影响,在HOSS算法中,有两种直方图:静态宽度直方图和动态宽度直方图。

1.静态宽度直方图:标准的直方图构建方法,在值范围内使用k个等宽箱。样本落入每个桶的频率(相对数量)作为箱子高度的估计。

2.动态宽度直方图:首先对所有值进行排序,然后每个箱子里装相同数量的 N k \frac Nk kN个样本,其中 N N N是总样本数, k k k是箱个数;直方图中的箱面积表示样本个数,所以每个箱的面积都是相同的,又因为箱的宽度是由箱中第一个值和最后一个值决定的,而所有箱的面积都一样,因此每一个箱的高度都是可计算的。箱越宽,跨度越大,概率也就越小。

关于如何这两种方法的优劣,HOSS论文上说的是: “The reason why both methods are offered in HBOS is due to the fact of having very different distributions of the feature values in real world data. Especially when value ranges have large gaps (intervals without data instances), the fixed bin width approach estimates the density poorly (a few bins may contain most of the data). Since anomaly detection tasks usually involve such gaps in the value ranges due to the fact that outliers are far away from normal data, we recommend using the dynamic width mode, especially if distributions are unknown or long tailed. Besides, also the number of bins k needs to be set. An often used rule of thumb is setting k to the square root of the number of instances N.” 大体意思是,当异常值和正常值相差很大时,动态宽度直方图效果会更好;同时,对于直方图的个数,推荐的设定值是样本总个数的平方根

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
知识图谱异常检测是指在知识图谱中找出与预期行为差异较大的数据对象的过程。这种检测可以帮助发现知识图谱中的异常点或离群点。异常点检测在许多领域中都有应用,例如广告点击反作弊和设备损坏等。异常点通常是与其他数据对象明显不同的数据对象。在知识图谱中,异常检测可以基于模式或基于社区的方法进行。基于模式的方法可以增强解释性,便于安全人员或领域专家进行事后分析追溯异常原因。然而,这些方法可能存在高假阳性率和难以确定阈值的问题。另一方面,基于社区的方法可以通过检测知识图谱中的社区结构来发现异常。这些方法可以提供更全面的异常检测,但可能缺乏解释性。因此,在知识图谱异常检测中,可以根据具体需求选择适合的方法。\[1\]\[3\] #### 引用[.reference_title] - *1* [无监督算法与异常检测](https://blog.csdn.net/weixin_41362649/article/details/105192615)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [知识图谱构建实战](https://blog.csdn.net/qq_40671063/article/details/123912566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [论文笔记——图异常检测](https://blog.csdn.net/qq_30101409/article/details/109134261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值