转载请注明出处:http://blog.csdn.net/gamer_gyt
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer
一:异常检测概述
1)引用维基百科
在数据挖掘中,异常检测(英语:anomaly detection)对不匹配预期模式或数据集中其他项目的项目、事件或观测值的识别。通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。异常也被称为离群值、新奇、噪声、偏差和例外。
特别是在检测滥用与网络入侵时,有趣性对象往往不是罕见对象,但却是超出预料的突发活动。这种模式不遵循通常统计定义中把异常点看作是罕见对象,于是许多异常检测方法(特别是无监督的方法)将对此类数据失效,除非进行了合适的聚集。相反,聚类分析算法可能可以检测出这些模式形成的微聚类。
2)有三大类异常检测算法
在假设数据集中大多数实例都是正常的前提下
- 无监督异常检测方法能通过寻找与其他数据最不匹配的实例来检测出未标记测试数据的异常。
- 监督式异常检测方法需要一个已经被标记“正常”与“异常”的数据集,并涉及到训练分类器(与许多其他的统计分类问题的关键区别是异常检测的内在不均衡性)。
- 半监督式异常检测方法根据一个给定的正常训练数据集创建一个表示正常行为的模型,然后检测由学习模型生成的测试实例的可能性。
3)应用领域
异常检测技术用于各种领域,如入侵检测、欺诈检测、故障检测、系统健康监测、传感器网络事件检测和生态系统干扰检测等。它通常用于在预处理中删除从数据集的异常数据。在监督式学习中,去除异常数据的数据集往往会在统计上显著提升准确性。
二:正态分布
1)正态分布介绍
正态分布又名高斯分布,是一个在数学,物理以及工程等领域都非常重要的概率分布。由于这个分布函数有很多漂亮的性质,使得其在诸多设计统计科学离散科学等许多领域都有着重大的影响力。
若随机变量X服从一个位置参数为 $ \mu $ 尺度参数为 $ \sigma $ 的概率分布,记为:
X
∼
N
(
μ
,
σ
2
)
X \sim N(\mu,\sigma^2)
X∼N(μ,σ2)
则其概率密度函数为
f
(
x
)
=
1
σ
2
π
e
−
(
x
−
μ
)
2
2
σ
2
f(x) = {1 \over \sigma\sqrt{2\pi} }\,e^{- {{(x-\mu )^2 \over 2\sigma^2}}}
f(x)=σ2π1e−2σ2(x−μ)2
正态分布的数学期望值或期望值 $\mu $ 等于位置参数,决定了分布的位置;其方差 $ \sigma^2 $ 的开平方或标准差 $ \sigma $ 等于尺度参数,决定了分布的幅度。
##2) 标准正态分布
若
μ
\mu
μ = 0,
σ
\sigma
σ=1 ,这个分布被称为标准正态分布,这个分布可以简化为:
f
(
x
)
=
1
2
π
exp
(
−
x
2
2
)
f(x) = \frac{1}{\sqrt{2\pi}} \, \exp\left(-\frac{x^2}{2} \right)
f(x)=2π1exp(−2x2)
不同参数的正态分布图:
3)正态分布中一些值得注意的量:
- 密度函数关于平均值对称
- 平均值与它的众数(statistical mode)以及中位数(median)同一数值。
- 函数曲线下68.268949%的面积在平均数左右的一个标准差范围内。
- 95.449974%的面积在平均数左右两个标准差 2 σ \sigma σ 的范围内。
- 99.730020%的面积在平均数左右三个标准差 3 σ \sigma σ 的范围内。
- 99.993666%的面积在平均数左右四个标准差 4 σ \sigma σ 的范围内。
- 函数曲线的反曲点(inflection point)为离平均数一个标准差距离的位置。
更多基础资料参考WIKI :点击查看
三:异常点检测介绍
异常点检测(又称为离群点检测)是找出其行为很不同于预期对象的一个检测过程。这些对象被称为异常点或者离群点。异常点检测在很多实际的生产生活中都有着具体的应用,比如信用卡欺诈,工业损毁检测,图像检测等。
异常点(outlier)是一个数据对象,它明显不同于其他的数据对象,就好像它是被不同的机制产生的一样。例如下图红色的点,就明显区别于蓝色的点。相对于蓝色的点而言,红色的点就是异常点。
一般来说,进行异常点检测的方法有很多,最常见的就是基于统计学的方法。
1)基于正态分布的一元离群点检测方法
假设有 n 个点 ( x 1 , . . . , x n ) (x_{1},...,x_{n}) (x1,...,xn),那么可以计算出这 n 个点的均值$ \mu$ 和方差 $ \sigma $。均值和方差分别被定义为:
μ = ∑ i = 1 n x i / n \mu=\sum_{i=1}^{n}x_{i}/n μ=i=1∑nxi/n
σ
2
=
∑
i
=
1
n
(
x
i
−
μ
)
2
/
n
.
\sigma^{2}=\sum_{i=1}^{n}(x_{i}-\mu)^{2}/n.
σ2=i=1∑n(xi−μ)2/n.
在正态分布的假设下,区域
μ
±
3
σ
\mu\pm 3\sigma
μ±3σ 包含了99.7% 的数据,如果某个值距离分布的均值$ \mu $ 超过了$ 3\sigma $,那么这个值就可以被简单的标记为一个异常点(outlier)。
2)多元离群点的检测方法
涉及两个或者两个以上变量的数据称为多元数据,很多一元离群点的检测方法都可以扩展到高维空间中,从而处理多元数据。
(1) 基于一元正态分布的离群点检测方法
假设 n 维的数据集合形如$ \vec{x}{i}=(x{i,1},…,x_{i,n}), i\in {1,…,m}
,
那
么
可
以
计
算
每
个
维
度
的
均
值
和
方
差
,那么可以计算每个维度的均值和方差
,那么可以计算每个维度的均值和方差 \mu_{j},\sigma_{j}, j\in{1,…,n}
.
具
体
来
说
,
对
于
. 具体来说,对于
.具体来说,对于 j\in {1,…,n}$,可以计算
μ
j
=
∑
i
=
1
m
x
i
,
j
/
m
\mu_{j}=\sum_{i=1}^{m}x_{i,j}/m
μj=i=1∑mxi,j/m
σ
j
2
=
∑
i
=
1
m
(
x
i
,
j
−
μ
j
)
2
/
m
\sigma_{j}^{2}=\sum_{i=1}^{m}(x_{i,j}-\mu_{j})^{2}/m
σj2=i=1∑m(xi,j−μj)2/m
在正态分布的假设下,如果有一个新的数据
x
⃗
\vec{x}
x,可以计算概率
p
(
x
⃗
)
p(\vec{x})
p(x) 如下:
p
(
x
⃗
)
=
∏
j
=
1
n
p
(
x
j
;
μ
j
,
σ
j
2
)
=
∏
j
=
1
n
1
2
π
σ
j
exp
(
−
(
x
j
−
μ
j
)
2
2
σ
j
2
)
p(\vec{x})=\prod_{j=1}^{n} p(x_{j};\mu_{j},\sigma_{j}^{2})=\prod_{j=1}^{n}\frac{1}{\sqrt{2\pi}\sigma_{j}}\exp(-\frac{(x_{j}-\mu_{j})^{2}}{2\sigma_{j}^{2}})
p(x)=j=1∏np(xj;μj,σj2)=j=1∏n2πσj1exp(−2σj2(xj−μj)2)
根据概率值的大小就可以判断 x 是否属于异常值。运用该方法检测到的异常点如图,红色标记为异常点,蓝色表示原始的数据点.
(2)多元高斯分布的异常点检测
假设 n 维的数据集合$ \vec{x}=(x_{1},…,x_{n})$ , 可以计算 n 维的均值向量
μ
⃗
=
(
E
(
x
1
)
,
.
.
.
,
E
(
x
n
)
)
\vec{\mu}=(E(x_{1}),...,E(x_{n}))
μ=(E(x1),...,E(xn))
和
n
×
n
n\times n
n×n 的协方差矩阵:
Σ
=
[
C
o
v
(
x
i
,
x
j
)
]
,
i
,
j
∈
{
1
,
.
.
.
,
n
}
\Sigma=[Cov(x_{i},x_{j})], i,j \in \{1,...,n\}
Σ=[Cov(xi,xj)],i,j∈{1,...,n}
如果有一个新的数据
x
⃗
\vec{x}
x,可以计算
p
(
x
⃗
)
=
1
(
2
π
)
n
2
∣
Σ
∣
1
2
exp
(
−
1
2
(
x
⃗
−
μ
⃗
)
T
Σ
−
1
(
x
⃗
−
μ
⃗
)
)
p(\vec{x})=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp(-\frac{1}{2}(\vec{x}-\vec{\mu})^{T}\Sigma^{-1}(\vec{x}-\vec{\mu}))
p(x)=(2π)2n∣Σ∣211exp(−21(x−μ)TΣ−1(x−μ))
根据概率值的大小就可以判断$ \vec{x} $ 是否属于异常值。
(3)使用马氏 (Mahalanobis) 距离检测多元离群点
对于一个多维的数据集合 D,假设$ \overline{a}
是
均
值
向
量
,
那
么
对
于
数
据
集
D
中
的
其
他
对
象
a
,
从
a
到
是均值向量,那么对于数据集 D 中的其他对象 a,从 a 到
是均值向量,那么对于数据集D中的其他对象a,从a到 \overline{a} $的 Mahalanobis 距离是
M
D
i
s
t
(
a
,
a
‾
)
=
(
a
−
a
‾
)
T
S
−
1
(
a
−
a
‾
)
,
MDist(a,\overline{a})=\sqrt{(a-\overline{a})^{T}S^{-1}(a-\overline{a})},
MDist(a,a)=(a−a)TS−1(a−a),
其中 S 是协方差矩阵。
在这里,$MDist(a,\overline{a}) $ 是数值,可以对这个数值进行排序,如果数值过大,那么就可以认为点 a 是离群点。或者对一元实数集合$ {MDist(a,\overline{a})|a\in D}$ 进行离群点检测,如果$ MDist(a,\overline{a})$ 被检测为异常点,那么就认为 a 在多维的数据集合 D 中就是离群点。
运用 Mahalanobis 距离方法检测到的异常点如图,红色标记为异常点,蓝色表示原始的数据点。
(4)使用卡方($ \chi^{2}$) 统计量检测多元离群点
在正态分布的假设下,
χ
2
\chi^{2}
χ2 统计量可以用来检测多元离群点。对于某个对象 $ {a}
,
,
,\chi^{2} $ 统计量是
χ
2
=
∑
i
=
1
n
(
a
i
−
E
i
)
2
/
E
i
.
\chi^{2}=\sum_{i=1}^{n}(a_{i}-E_{i})^{2}/E_{i}.
χ2=i=1∑n(ai−Ei)2/Ei.
其中,
a
i
a_{i}
ai 是$ {a} $ 在第 i 维上的取值,
E
i
E_{i}
Ei 是所有对象在第 i 维的均值,n 是维度。如果对象
a
{a}
a 的
χ
2
\chi^{2}
χ2 统计量很大,那么该对象就可以认为是离群点。
运用$ \chi^{2} $统计量检测到的异常点如图,红色标记为异常点,蓝色表示原始的数据点。
参考:https://zr9558.com/2016/06/13/outlierdetectionone/

扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!