1.基于统计学的方法
概念:假定正常的数据对象由一个统计模型产生,而不遵守该模型的数据是异常点。即,利用统计学方法对数据集建立一个模型,然后考虑数据点有多大概率符合这个模型,低概率区域中的数据点,更可能为异常点。
1.1参数方法
假定数据对象是由一个以θ\thetaθ为参数的参数分布产生(即产生的数据符合以θ\thetaθ为参数的分布),该参数分布的概率密度给出f(x,θ)f(x,\theta)f(x,θ),将数据点x带入到概率密度公式,得出该数据点符合该分布的概率,概率越小,越不符合该分布,是异常点的可能性就越大。
- 基于正态分布的一元异常点检测:
一元:仅涉及一个特征。
Example:假定数据集{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),然后可以由输入数据学习正态分布的参数μ,σ2\mu ,\sigma ^{2}μ,σ2。
μ=1m∑i=1mx(i) \mu=\frac{1}{m} \sum_{i=1}^{m} x^{(i)} μ=m1i=1∑mx(i)
σ2=1m∑i=1m(x(i)−μ)2 \sigma^{2}=\frac{1}{m} \sum_{i=1}^{m}\left(x^{(i)}-\mu\right)^{2} σ2=m1i=1∑m(x(i)−μ)2
求出参数后,可以根据概率密度函数p(x)=12πσexp(−(x−μ)22σ2)p(x)=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right)p(x)=2πσ1exp(−2σ2(x−μ)2)计算数据点服从该分布的概率,如果计算出来的概率低于阈值,就可以认为该数据点为异常点。
阈值选择是个经验值,可以选择在验证集上使得评估指标值最大(也就是效果最好)的阈值取值作为最终阈
值。例如常用的3σ\sigmaσ原则中,如果数据点超过范围(μ−3σ,μ+3σ)(\mu-3 \sigma, \mu+3 \sigma)(μ−3σ,μ+3σ),那么这些点很有可能是异常点。这个区间包含了大部分的数据。

利用箱线图进行数据的可视化,50%的数据分布在箱内,方框的底部和顶部分别为Q1(下四分位数)和Q3(上四分位数),方框内的线段为第二四分位数(中位数),Q3与Q1之间的位差IQR,小于Q1-1.5IQR或大于Q3+1.5IQR的值为异常值。(Q1-1.5IQR和Q3+1.5IQR被称为异常值截断点)

- 多元异常点检测:
与一元异常点检测类似,这时涉及两个或多个特征。如:基于正态分布的多元异常点检测,对每个特征列计算均值μ\muμ和标准差σ2\sigma^{2}σ2,下式计算第j个特征的均值与标准差。
μj=1m∑i=1mxj(i)\mu_{j}=\frac{1}{m} \sum_{i=1}^{m} x_{j}^{(i)}μj=m1i=1∑mxj(i)
σj2=1m∑i=1m(xj(i)−μj)2\sigma_{j}^{2}=\frac{1}{m} \sum_{i=1}^{m}\left(x_{j}^{(i)}-\mu_{j}\right)^{2}σj2=m1i=1∑m(xj(i)−μj)2
假设各个特征之间相互独立,新样本x(n个特征)通过概率密度函数p(x)=∏j=1np(xj;μj,σj2)=∏j=1n12πσjexp(−(xj−μj)22σj2)p(x)=\prod_{j=1}^{n} p\left(x_{j} ; \mu_{j}, \sigma_{j}^{2}\right)=\prod_{j=1}^{n} \frac{1}{\sqrt{2 \pi} \sigma_{j}} \exp \left(-\frac{\left(x_{j}-\mu_{j}\right)^{2}}{2 \sigma_{j}^{2}}\right)p(x)=∏j=1np(xj;μj,σj2)=∏j=1n2πσj1exp(−2σj2(xj−μj)2),计算得出x符合以μ\muμ为均值、以σ2\sigma^{2}σ2为标准差的正态分布的概率(每个特征所得到的概率密度相乘)
如果各特征之间具有相关性,则使用多元高斯分布。
1.2非参数方法
不像参数方法那样对数据的分布进行假设,非参数方法直接对输入的数据进行学习,最常用的是直方图,利用直方图模拟数据的分布情况,能够知道每个部分的密度情况。
从此分布图就可以很清楚地看到,尽管数据集中的大多数值都被分组在一起,但仍有相当多的值似乎与众不同。 因此,可以过滤这些值并检查它们是否为异常。
1.3HBOS
假设每个维度都是相互独立的,分别计算一个样本再不同维度上所处的密度空间,并叠加结果。HBOS算法简单、开销小,可以进行并行运算,适用于大量数据,该算法的缺点在于,无法考虑不同特征之间的关系。
算法步骤:
- 为每个数据维度做出数据直方图。对离散型数据统计每个值的频数并计算相对频率。对连续型数据根据分布的不同采用以下两种方法:
- 静态宽度直方图:标准的直方图构建方法,在值范围内使用k个等宽箱(将数据取值范围分为k份)。样本落入每份的频率(相对数量)作为密度(箱子高度)的估计。
- 动态宽度直方图:首先对所有值进行排序,然后固定数量的Nk\frac{N}{k}kN个连续值装进一个箱里,其中N是总实例数(如:10),k是箱个数(如:2);直方图中的箱面积(5,每个箱中放5个实例)表示实例数。因为箱的宽度是由箱中第一个值和最后一个值决定的,所有箱的面积都一样,因此每一个箱的高度都是可计算的。这意味着跨度大的箱密度小,只有一种情况例外,超过k个数相等,此时允许在同一个箱里超过Nk\frac{N}{k}kN值。
- 对每个维度都计算了一个独立的直方图,其中每个箱子的高度表示密度的估计。然后为了使得最大高度为1(确保了每个特征与异常值得分的权重相等),对直方图进行归一化处理。最后,每一个实例的HBOS值由以下公式计算:
HBOS(p)=∑i=0dlog(1histi(p)) HBOS(p)=\sum_{i=0}^{d} \log \left(\frac{1}{\operatorname{hist}_{i}(p)}\right) HBOS(p)=i=0∑dlog(histi(p)1)
通过直方图,可以看出密度越大的区域,histi(p)\operatorname{hist}_{i}(p)histi(p)越大,HBOS值越小,为异常值的可能性越小。
推导过程: 假设样本ppp的第i个特征的概率密度为Pi(p)P_{i}(p)Pi(p),则样本ppp的概率密度可以计算为P(p)=P1(p)P2(p)⋯Pd(p) P(p)=P_{1}(p)P_{2}(p) \cdots P_{d}(p) P(p)=P1(p)P2(p)⋯Pd(p)
两边取对数:log(P(p))=log(P1(p)P2(p)⋯Pd(p))=∑i=1dlog(Pi(p)) \log (P(p))=\log \left(P_{1}(p) P_{2}(p) \cdots P_{d}(p)\right)=\sum_{i=1}^{d} \log \left(P_{i}(p)\right) log(P(p))=log(P1(p)P2(p)⋯Pd(p))=i=1∑dlog(Pi(p))
概率密度越大,异常评分越小,为了方便评分,两边乘以“-1”:−log(P(p))=−1∑i=1dlog(Pt(p))=∑i=1d1log(Pi(p)) -\log (P(p))=-1 \sum_{i=1}^{d} \log \left(P_{t}(p)\right)=\sum_{i=1}^{d} \frac{1}{\log \left(P_{i}(p)\right)} −log(P(p))=−1i=1∑dlog(Pt(p))=i=1∑dlog(Pi(p))1
最后可得:HBOS(p)=−log(P(p))=∑i=1d1log(Pi(p)) H B O S(p)=-\log (P(p))=\sum_{i=1}^{d} \frac{1}{\log \left(P_{i}(p)\right)} HBOS(p)=−log(P(p))=i=1∑dlog(Pi(p))1
—基于统计学的方法&spm=1001.2101.3001.5002&articleId=112596281&d=1&t=3&u=e1b4d3a3767f45df9bb6edf9ab4c8a66)
1523

被折叠的 条评论
为什么被折叠?



