[吴恩达机器学习笔记]15非监督学习异常检测4-6构建与评价异常检测系统

15.异常检测 Anomaly detection

觉得有用的话,欢迎一起讨论相互学习~

我的微博我的github我的B站

吴恩达老师课程原地址

参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广

15.4开发和评价一个异常检测系统 Developing and Evaluating an Anomaly Detection System

  • 异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量 y 的值来告诉我们数据是否真的是异常的。我们需要另一种方法来帮助检验算法是否有效。
  • 当我们开发一个异常检测系统时,我们从带标记(异常或正常)的数据着手,我们从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。

示例

  • 例如:我们有 10000 台正常引擎的数据,有 20 台异常引擎的数据。 我们这样分配数据:
  1. 6000 台正常引擎的数据作为训练集
  2. 2000 台正常引擎和 10 台异常引擎的数据作为交叉检验集
  3. 2000 台正常引擎和 10 台异常引擎的数据作为测试集

测评方法

  1. 根据 训练集 数据,我们估计特征的平均值和方差并构建 p(x)函数
  2. 交叉检验集 ,我们尝试使用不同的 ε 值作为阀值,并预测数据是否异常,根据 F1值或者查准率与查全率的比例来选择 ε
  3. 选出 ε 后,针对 测试集 进行预测,计算异常检验系统的 F1 值,或者 查准率与查全率之比

Note 对于异常检测问题而言,样本数据集往往是倾斜的,即 标记为1异常的数据往往很少,而标记为0即正常的数据往往很多 此时使用准确率等方法来进行判断一个模型的好坏往往是不合适的,所以通过 查准率和查全率以及F1分数能够很好的分析和判断这个问题


15.5异常检测还是监督学习 Anomaly Detection vs. Supervised Learning

  • 在以上关于评价异常检测系统的时候,我们尝试使用了 带标签的数据 来评价一个异常检测系统的好坏,既然我们有 带标签的数据 为什么不直接使用监督学习的方法来做异常检测呢?

  • 异常检测 监督学习
    只有很少量的异常数据(通常只有20-50个样本的数据)即y=1,而有大量的正常数据y=0 同时拥有大量的异常是数据和正常数据
    有许多不同种类的异常非常难使用少量的正向类数据来训练算法 有足够多的正向类实例,足够用于训练算法,未来遇到的异常实例与训练集中的异常实例会非常近似
    未来遇到的异常可能与只掌握的异常非常的不同
    例如 例如
    1.欺诈行为检测 1.邮件过滤器
    2.生产质量评估 2.天气预报
    3.检测数据中心的计算机的运行状况 3.肿瘤分类
  • Note 通常来说,正样本的数量很少(20-50条),甚至有时候是 0,也就是说,出现了太多没见过的不同的异常类型,那么对于这些问题,通常应该使用的算法就是 异常检测算法


15.6选择合适的特征 Choosing what features to use

  • 对于异常检测算法,使用的特征至关重要, 异常检测假设特征符合高斯分布 ,如果数据的分布不是高斯分布,异常检测算法也能够工作,但是效果还是数据满足高斯分布更好。
    • 所以在实现异常检测系统之前,往往用直方图表示数据或者直接画出数据的分布,以确保这些数据在进入异常检测算法前看上去比较接近于高斯分布,如下图中(1)所示
    • 如上图(2)中所示,曲线的峰值靠近左边,是一个十分不均衡的分布,为了使其 更加接近于高斯分布 ,可以对其实施log变换,使其成为近似高斯分布的状态。
    • 一般可以采取对数法和指数法来解决这个问题,例如使用 对数函数 \(x=log(x+c)\),其中c为非负常数,或者 指数方法 \(x=x^c\),c为0-1之间的一个分数。

示例

误差分析

  • 一个常见的问题是一些异常的数据可能也会有较高的 p(x)值,因而被算法认为是正常的。这种情况下误差分析能够帮助我们, 我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。我们可能能从问题中发现我们需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测
  • 对于特征的选择一般不会选择特别特别大或者特别特别小的特征,例如下面以判断计算机机房电脑故障为例介绍异常检测算法:
  • 特征1. 内存使用量
  • 特征2. 磁盘每秒访问次数
  • 特征3. CPU负载
  • 特征4. 网络流量
  • 以上特征为机房中对计算机工作状态进行异常检测的算法,通过识别CPU负载和网络流量的变化可以判断计算机是否发生异常。当网络流量剧增时,CPU负载也会大幅增加,这是一种异常情况,但是当计算机执行命令出现死循环时,CPU负载会大幅增加,但是网络流量却不会变化,这是一种新的异常状态。我们可以通过计算CPU负载和网络流量的比值来判断这种计算机因为执行错误程序进入死循环而导致的异常状态。
posted @ 2018-09-11 15:45  WUST许志伟  阅读(515)  评论(0编辑  收藏  举报