01 问题动机

异常检测主要用在非监督学习,但从某些角度看,跟有监督学习问题是非常相似的。


  • 异常检测问题就是我们希望知道新的测试数据是否有某种异常,换句话说新的测试数据是否需要进一步测试。如下面这个图(飞机引擎的例子),其中x_1、x_2是飞机引擎的特征。通过测试发现如果x_test在对应点里面,那么他就不存在异常,如果在对应的外面,那么就存在异常。

  • 我们通常认定这m个数据都是异常或者都不是异常的,我们需要一个算法告诉我们一个新的样本数据是否异常。因此我们要做的就是给定无标签训练集,我们对数据建模即p(x),也就是对x的分布概率建模。如果测试集的概率p低于阈值那么就将其标为异常,否则正常。越中心的点概率越高。

  • 异常检测最常见的应用是欺诈检测,例如许多购物网站常用来识别异常用户。可以针对不同的用户活动计算特征变量x^(i),于是建立一个模型来表示用户表现出各种行为的可能性。x_1也许是用户登陆的频率,x_2也许是用户访问某个页面的次数…,然后根据这些数据建立一个模型p(x),就可以用这个模型发现网站上行为可疑的人。
  • 另一个例子就是上面的飞机引擎例子。
  • 第三个是数据中心的计算机监控,这种技术被各大数据中心来监测大量的计算机可能发生的异常。

02 高斯分布(正态分布)

  • 假设x是一个实数的随机变量,如果x的概率分布服从高斯分布,那么记作X~N(均值,方差(标准差的平方))。高斯分布的概率密度绘制出来是一个钟形,均值控制中心位置,标准差控制宽度。

  • 下面是参数不同画出来的图像,不管怎么样阴影部分的积分一定是1。

  • 参数估计问题:给定数据集希望能找到能够估算出均值和方差的值。下面是公式:

03 算法

  • 我们处理异常检测的方法是:我们我们要用数据集建立起模型概率p(x),我们要试图解决出哪些特征量出现的概率较高,哪些出现的概率较低。分布项p(x)的估计问题有时也称为密度估计问题,我们列出p(x)的计算公式(x_1到x_n连乘)如下:

  • 异常检测算法:

    1. 选择特征量(能够描述所收集数据的一般特性的特征),能够帮助我们指出那些反常的样本。
    2. 给出m个未作标记的样本的训练集。
    3. 进行参数拟合u_1到u_n,(sita_1)2到(sita_n)2,运用公式来求解这些参数。
    4. 给一个测试样本,根据p(x)的公式来测量是否异常。

  • 如何对这些数据拟合出参数值,通过第一个图的数据求出第二个图(概率图),然后将第二个图两个数据进行相乘画出第三个图(三维图)。如果一个想要检测一个样本是否异常,可以直接看三维图,异常的都在图像下围显示(概率低),而正常都在图像上围(概率高),其中上下围以一个值(伊克塞了吗)作为分界线。

04 开发和评估异常检测系统

  • 实数评估的重要思想:当你为某一个应用开发学习算法时,你需要进行一系列的选择,比如选择使用什么特征。如果有一个方法通过返回一个实数来评估算法,那么就将变得容易多。如果有一个特征要考虑该不该将其纳入,就可以将其带入算法中返回一个实数来告诉你纳入前后对算法的影响。
  • 能够评估异常检测算法的标准方法:用一些带标签的数据来指明哪些是异常样本,哪些是正常样本。
  • 我们首先假设一些训练集看作是无标签的,他们是很大的正常样本的集合,即使其中掺杂了少许的异常样本也没关系。接下来在定义一些验证集和测试集(包含了已知是异常的样本即y=1)用来评估这个异常检测算法。

  • 举一个例子:飞机成产了一万个正常飞机,2到50个异常飞机。把这些数据分配给训练集、验证集和测试集的经典方法是:分配正常样本是6:2:2。异常样本只分给验证集和测试集一人一半。按照道理来说验证集和测试集应该是完全不同的两种数据。

  • 得到训练集、验证集和测试集后推导和评估算法:

    1. 使用训练集拟合模型p(x),也就是将这m个无标签(实际上都是正常的)样本都用高斯函数来拟合。
    2. 在验证集和测试集给出x的值,算法将预测出y的值,y=1对应异常样本,y=0代表正常样本。
  • 对于这个问题如果数据是倾斜数据(绝大多数数据都是正常的),我们就应该采用原来学过的真阳性、假阳性、真阴性、假阴性来计算召回率和准确率来预测算法的好坏。
  • 如果有一个验证集一个选择参数(伊克塞了吗)的方法就是尝试去使用许多不同的值,然后选择一个能够最大化F_1-score这样的实数,或者有其他好表现的。

05 异常检测 VS 监督学习

  • 什么情况下很可能使用异常检测算法以及什么时候使用监督学习算法?

    1. 第一种–>对于异常检测算法:它有很少的正样本和很多的负样本,当我们在处理估计p(x)的值来拟合所有的高斯参数的过程中,我们只需要负样本就够了;相反对于监督学习算法:在合理的范围内会有大量的正样本和负样本
    2. 第二种–>对于异常检测算法:经常会有许多不同类型的异常,因此如果是这种情况你会有很少量的正样本,对于一个算法就很难从少量的正样本去学习异常,尤其是未来可能出现的异常可能会和已有的异常截然不同。比如你在正样本中已经了解到5个或者更多发生故障的情况,但是可能到了明天你就需要检测一个全新的集合(新的异常),这种情况就可以对负样本用高斯分布模型来建模;相反对于监督学习算法:有一个足够多的正样本或者一个能识别正样本的算法(未来可能出现的正样本与你当前训练集中的正样本类似),他能观察大量的正样本和大量负样本来学习相应的特征,可以正确区分正负样本。(例如垃圾分类)

  • 下面是一些异常检测和监督学习的例子,对于欺诈行为/飞机引擎/计算机检测,如果有大量的欺诈行为/引擎异常/计算机运行异常的情况,就可以转化为监督学习,但是一般都是异常检测;对于垃圾分类,天气预报、癌症分类等问题有大量的同量级正负样本这些情况就使用监督学习。

  • 总结一句话就是异常检测以正常(负样本)来建模,监督学习以不正常(正样本)来训练。

06 选择要使用的功能

你使用什么特征来实现异常检测算法将会运用产生很大的影响


  • 在异常检测中我们要做的其中一件事就是使用高斯分布来对特征建模,所以我们经常做的一件事就是画出数据或者用直方图来表示数据,以确保这些数据在进入异常检测算法前看上去比较接近高斯分布。当然即使数据不是高斯分布也是可以运行的,就是运行好坏的问题。例如下图所示,图一是比较理想的,如果得到图二,我希望对数据进行一些如下不同的转换使得它看上去更接近高斯分布。

hist(x.^0.05,50)
  • 你如何得到异常检测算法的特征:通常用的方法就是通过一个误差分析步骤(跟我们之前讨论监督学习算法时误差分析的步骤是类似的)。我们先完整地训练出一个算法,然后在一组验证集上运行算法,然后找出那些预测出错的样本,并看看我们能否找到一些其他的特征来帮助学习算法,让那些在验证集中判断出错的样本表现得更好。下面通过一个例子来解释这个过程。一些大众的问题就是正负样本的概率都很高,以一个特征为例,x=2.5时的一个测试样本是异常的,但是混在了正常样本里,这时就需要找到一个新的特征来使算法可以很好的将x=2.5的测试样本进行分离。(绿色的代表异常)。

  • 下面是一些对异常检测算法选择特征变量时的一些思考:对于那些可能异常的样本即不选择那些特别特别大,也不选择特别特别小的特征。以监控数据中心的计算机的例子,如果一个计算机出现了故障,下面给出了一些可选的特征包括占用内存、磁盘每秒访问的次数、CPU负载和网络流量,现在假如说我怀疑某个出错的情况,在我的数据集中我的CPU负载和网络流量应该是线性关系,比如说检测服务器,一个服务器在运行多台电脑,这时x_3和x_4都很高;如果在运行任务时出现了死循环(x_3升高,x_4正常),这时要检测就可以建立一个新的特征x_5或者x_6。通过建立新的特征就可以捕捉到这些特殊的特征组合所出现的异常值。

07 多变量高斯分布

这节课将会学习目前为止学习的异常检测算法的一种可能的延伸,这个延伸会用到多元高斯分布。他有一些优势也有一些劣势,他能捕捉到之前的算法检测不出来的异常。


  • 异常检测算法给x_1和x_2建模的方法如下,给出一个样本(绿色的),可以从大体上看出x_1和x_2是线性的,而绿色的可以看出x_1很少,而x_2很多是不符合线性的。该图认为同一个圈的概率是一样的,但是实际上从图可以看出其实是不一样的。

  • 为了解决这个问题,我们要开发一个改良版的异常检测算法,要用到多元高斯分布或者叫多元正态分布。有一个特征向量x,我们不要对x_1和x_2分别建模,而是要建立一个整体的p(x)模型。它的参数是n维向量(u)和n×n的协方差矩阵。

    det(Sigma)-->用来计算行列式
    

  • 我们来看下这里的p(x)是什么样的。其中Sigma衡量的是方差或者说是x_1和x_2的变化量。缩小方差相当于缩小(Sigma)^2,下面是同时改变Sigma的两个值。

  • 接下来我们只改变特征向量x_1的方差,展示如下:

  • 同样的们只改变特征向量x_2的方差,展示如下:

  • 多元高斯分布一件很棒的事是你可以用它给数据的相关性建立模型(可以用它来给x_1和x_2高度相关的情况建立模型),如果改变非对角线上的元素你会得到一种不同的高斯分布,随着非对角线上的值不断增加可以看出x接近y(大部分数据落到了x_1=x_2),变得更窄。当把其设为正值时如下:

  • 当把其设为负值时(x_1=-x_2)如下:

  • 当然还可以改变平均参数u,即中心点所在位置。

08 使用多变量高斯分布的异常检测

  • 给定参数集来进行参数拟合或者说是参数估计问题(其中Sigma和PCA中写的是一样的)。

  • 把这些结合起来开发一个异常检测算法:

    1. 用我们的数据集来拟合模型
    2. 有一个测试样本,用多元高斯分布的公式来计算p(x)
    3. 比较p(x)与伊克塞了吗的大小来得出结果。

  • 原始模型对比多元高斯模型,多元高斯模型的轮廓都是轴对齐的。其实原始的模型就是多元高斯模型的特殊形式,,当多元高斯模型Sigma的非对角线都为0的情况下,将原始的方差放入到Sigma中,这时两个模型就会完全相同,也就是说这个用了多元高斯分布的新模型,比起之前的旧模型,这个新模型对应的分布方程的轮廓就是轴对齐的,所以不能用不同的特征之间的关系进行建模。

  • 那么什么时候用原始模型(比较常用),什么时候用多元高斯模型呢?比如之前计算机检测的例子,原始模型可能就需要建立一个新的特征,而多元高斯模型就能自动捕捉这种不同特征值之间的关系。
  • 原始模型的一个巨大的优势就是计算成本比较低(能适应数量巨大的特征),而多元高斯模型需要计算Sigma的逆矩阵也就意味着计算成本非常高。原始模型还有个优势是即使你有一个较小的有一定相关性的训练集也能顺利运行,而多元高斯分布模型需要样本的数量大于特征的数量(因为需要求逆矩阵)。我们使用多元高斯分布模型当且仅当m>>n(如果不满足这一点那么多元高斯分布模型就会有很多参数,因为协方差矩阵是一个n*n的,所以协方差矩阵有n2个参数,同样因为是一个对称矩阵所以更接近n2/2),所以需要确保有一个很大的m值,确保有足够的数据来拟合变量。
  • 如果你需要捕捉一些具有相关性的特征,通常是手动设计新的特征,但是当m很大或者是n不是很大时这时多元高斯模型更好。
  • 如果在实际操作中发现Sigma是奇异的不可逆的那么有两种情况:
    1. 没有满足m大于n的条件
    2. 存在冗余特征(比如x_1=x_2、x_3=x_4+x_5)

  • 总结下使用多元高斯分布来做异常检测,可以自动地捕捉正负样本各特征之间地关系。如果发现某些特征的组合值是异常的他就会标为异常样本。

机器学习 day15异常检测相关推荐

  1. 如何使用机器学习进行异常检测和状态监控?

    https://www.toutiao.com/a6653038876652732939/ 2019-02-01 22:28:43 本文将介绍机器学习和统计分析的几种不同技术和应用,然后展示如何应用这 ...

  2. 机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现

    机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现 参考文章: (1)机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现 (2)https://www.cn ...

  3. 【机器学习】异常检测算法之(HBOS)-Histogram-based Outlier Score

    HBOS全名为:Histogram-based Outlier Score.它是一种单变量方法的组合,不能对特征之间的依赖关系进行建模,但是计算速度较快,对大数据集友好,其基本假设是数据集的每个维度相 ...

  4. 【机器学习】异常检测算法速览(Python代码)

    正文共: 8636字 8图 预计阅读时间: 22分钟 一.异常检测简介 异常检测是通过数据挖掘方法发现与数据集分布不一致的异常数据,也被称为离群点.异常值检测等等. 1.1 异常检测适用的场景 异常检 ...

  5. 吴恩达机器学习 12.异常检测

    异常检测 1.问题的动机 什么是异常检测? 假想你是一个飞机引擎制造商,当你生产的飞机引擎从生产线上流出时,你需要进行QA(质量控制测试),而作为这个测试的一部分,你测量了飞机引擎的一些特征变量,比如 ...

  6. 快速攻克机器学习图像异常检测

    作者 | 小白       责编 | 欧阳姝黎 在机器学习中,处理异常检测任务是很常见的.数据科学家经常遇到必须显示,解释和预测异常的问题.在这篇文章中,我们主要讲述:从时间序列交换为图像.给定一张图 ...

  7. 机器学习系列-- 异常检测(Anomaly Detection)

    目录 1.问题的动机 2.高斯分布 3.异常检测算法 4.开发和评价一个异常检测系统 5.异常检测与监督学习对比 6.特征选择 1.问题的动机 这一部分介绍异常检测(Anomaly detection ...

  8. 【机器学习】异常检测

    前言 异常检测实际案例:网络安全中的攻击检测,金融交易欺诈检测,疾病侦测,和噪声数据过滤等.时间序列的异常又分为点异常和模式异常. 对于一个新观测值进行判断: 离群点检测: 训练数据包含离群点,即远离 ...

  9. 【机器学习】异常检测算法(I)

    在给定的数据集,我们假设数据是正常的 ,现在需要知道新给的数据Xtest中不属于该组数据的几率p(X). 异常检测主要用来识别欺骗,例如通过之前的数据来识别新一次的数据是否存在异常,比如根据一个用户以 ...

最新文章

  1. Dubbo入门Demo
  2. linux 设置开机命令提示符,centos设置开机默认命令行启动
  3. Linux Guide for Developers --- ubuntu开发者
  4. 马尔可夫决策过程 Markov decision process MDP, 连续时间Markov chain, CMDP(全)
  5. 【转】2.2[译]async/await中阻塞死锁
  6. 容器大小_C++复习篇(7)序列式容器vector
  7. 基本概念----Beginning Visual C#
  8. 23种设计模式-装饰模式
  9. Matlab字符串转换及数值格式转换
  10. 五款在线思维导图工具的比较
  11. 李少白讲摄影-不放过一切光线地坛书市新书首发圆满结束
  12. 考研数学笔记(更新中)
  13. Android 非功能性测试(性能测试)
  14. 计算机 90学时培训总结,90学时培训心得体会
  15. 学习日常英语(每天更新10+—)
  16. 求和:1/3+3/5+5/7+7/9+………..+97/99
  17. 怎么监控mysql数据变化_实时监控mysql数据库变化
  18. 高新技术企业认定条件
  19. 杨镇一中2021高考成绩查询,杨镇一中高三第14周周历
  20. 2016“百度之星”-测试赛

热门文章

  1. 一个二维码实现苹果和安卓两个市场安装包自动分发
  2. 深度关注 | 元宇宙如何改写人类社会生活
  3. php redis获取incr的值,Redis Incr命令
  4. java测试输入星座匹配_java十二星座 (快来测试你是什么星座吧)
  5. matlab用jc法计算可靠度,基于MATLAB的截尾分布下JC法计算可靠度
  6. 如何做好微信朋友圈推广?
  7. 手把手教你设计短信验证码
  8. 成都拓嘉启远:拼多多上产品清单的条件
  9. 【uniapp】将uni-app开发的安卓程序运行到雷电模拟器上进行调试
  10. 趣头条:资讯界的拼多多?