zoukankan      html  css  js  c++  java
  • 异常检测(斯坦福machine learning week 9)

    在接下来的一系列课程中,我将向大家介绍异常检测(Anomaly detection)问题。这是机器学习算法的一个常见应用。这种算法的一个有趣之处在于它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题。

    1 定义

    异常检测问题更正式一些的定义如下:

    假设我们有m个正常的样本数据x(1)x(2)x(m),我们需要一个算法来告诉我们一个新的样本数据xtest是否异常。

    我们要采取的方法是:给定无标签的训练集,对数据集x建立一个概率分布模型p(x)。当我们建立了x的概率模型之后,我们就会说,对于新的飞机引擎xtest,如果概率p低于阈值ε:

    p(xtest)<ε

    那么就将其标记为异常。

    因此当我们看到一个新的引擎在我们根据训练数据得到的p(xtest)kai模型中概率非常低时,我们就将其标记为异常;反之如果p(xtest)大于给定的阈值ε,我们就认为它是正常的。

    2 高斯分布中,μ和σ的关系

    我们举例来说明一下高斯分布中μ和σ这两个参数之间的关系:

    μ=0,σ=1 μ=0,σ=0.5 μ=0,σ=2 μ=3,σ=0.5
    图片描述 图片描述 图片描述 图片描述

    具体来说,高斯分布中的参数估计公式如下:

    μ=1mi=1mx(i)

    σ2=1mi=1m(x(i)μ)2

    还有一点,如果你在学习统计学时,可能会见到这个式子:σ2=1m1mi=1(x(i)μ)2,但在机器学习领域,大家习惯使用σ2=1mmi=1(x(i)μ)2,其实在实际情况中,具体使用1m还是1m1其实区别很小,只要你有一个稍大的数据集。这两个版本的公式在理论特性和数学特性上稍有不同,但在实际应用中,他们的区别甚小,几乎可以忽略不计。

    3 异常检测的具体算法

    假如说我们有一个无标签的训练集,其中共有m个训练样本,并且这里的训练集里的每一个样本都是n维的特征,因此你的训练集应该是m个n维的特征构成的样本矩阵:

    x(1),,x(m)xRn

    对于我们的异常检测算法,我们要从数据中建立一个p(x)概率模型。由于x是一个向量,因此:

    p(x)=p(x1)p(x2)p(x3)p(xn)

    我们假定特征x_1服从高斯正态分布:

    x1N(μ1,σ21)

    根据上节学到的知识,你可以得出对应的μ_1和σ_1:

    μ1=1mi=1mx(i)1

    σ21=1mi=1m(x(i)1μ1)2

    这样p(x_1)就可以写成这样一个高斯分布:

    p(x1)=p(x1;μ1,σ21)

    同样地,我假设x_2也服从高斯分布,可以得出:

    p(x2)=p(x2;μ2,σ22)

    与此类似x_3服从另外一个高斯分布:

    p(x3)=p(x3;μ3,σ23)

    直到x_n:

    p(xn)=p(xn;μn,σ2n)

    因此可以得出:

    p(x)=p(x1;μ1,σ21)p(x2;μ2,σ22)p(x3;μ3,σ23)p(xn;μn,σ2n)=Πnj=1p(xj;μj,σ2j)

    其中Π(读作pai,是π的大写形式)类似∑符号,只不过这里将连加换成了连乘。顺便要说的是,估计p(x)的分布问题,通常被称为密度估计问题。

    4 异常检测算法步骤总结

    让我们来总结一下异常检测算法的具体步骤:

    • 1.从样本中选择一些能体现出异常行为的特征x_i。
      我们可以尝试找出一些特征,比如在你的系统里,那些能看出用户异常行为或者欺诈行为的特征。

    • 2.分别计算出每个特征的参数μ1,,μn,σ21,,σ2n

      μ=μ1μ2μn=1mi=1mx(i)

      σ2=σ21σ22σ2n=1mi=1m(x(i)μ)2

      其中:

    μj=1mi=1mx(i)j

    σ2j=1mi=1m(x(i)jμj)2

    m个无标签数据分别计算出他们每个特征的期望μ和方差σ2。注意,这里μ和σ都是m维度的向量,而μjσj都是其中对应的第j个元素。

    3.给定一个新的样本x,计算出它对应的p(x):
    p(x)=Πnj=1p(xj;μj,σ2j)=Πnj=112πσjexp((xjμj)22σ2j)
    通过判断p(x)<ε,来判断是否有异常发生。

    给定一个用户行为的样本,如何知道用户行为是否异常呢?我们将用户行为数据带入到p(x)的计算中来,如果这个结果非常小,那么我们就将这个行为标注为异常行为。

    异常分析例子

    假如说我们有下面这样的数据集:
    图片描述
    从图中我们可以看出,数据集有两个特征x1x2

    其中特征x1对应的是水平方向的数据,它的均值是5,标准差是2;x_2对应的是竖直方向上的数据,它的均值是3,标准差是1:

    μ1=5,σ1=2
    μ2=3,σ2=1
    这两个特征对应的分布如下:

    p(x1;μ1,σ21) p(x2;μ2,σ22)
    图片描述 图片描述

    如果绘制出p(x)的图像,那么这个图像如下:
    图片描述

    假如x_1=2,x_2=2那么就是这个点:
    在3-D表面图上的高度就代表p(x)的值。而这个p(x)完整的写出来就是下面的形式:

    p(x)=p(x1;μ1,σ21)p(x2;μ2,σ22)

    那么有了这个表达式,我们如何鉴定新的样本是否异常呢?

    要回答这个问题,我们可以先给计算机设某个无穷小的数值ε,假如我设置ε=0.02(我会在后面讲到如何选取ε的值)。

    现在我们有两个样本,分别为x(1)testx(2)test
    图片描述

    我们用上面的式子来计算出p(x(1)test),可以发现这是一个比较大的数,具体大小是大于等于ε的,所以对于x(1)testp(x(2)test),我们发现这是一个很小的数,具体值是小于ε的,所以我们说x(2)test属于异常数据。

    具体相关细节详见

  • 相关阅读:
    大数据量并发处理
    一网打尽当下NoSQL类型、适用场景及使用公司
    高并发,大数据量,你的系统考虑哪些问题?
    在学习的路上
    CheckBox全选JS代码
    关于时间的两个写法
    Asp.Net MVC4.0 官方教程拓展之一为模型属性增加中文显示名称
    Asp.Net MVC4.0 官方教程 入门指南之八为Movie模型和库表添加字段
    Asp.Net MVC4.0 官方教程 入门指南之六查看Edit方法和Edit视图
    Asp.Net MVC4.0 官方教程 入门指南之五控制器访问模型数据
  • 原文地址:https://www.cnblogs.com/zswbky/p/8454056.html
Copyright © 2011-2022 走看看