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

2020-08-14 15:30:35 浏览数 (1)

参考资料 斯坦福大学 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 负载和网络流量的比值来判断这种计算机因为执行错误程序进入死循环而导致的异常状态。

参考资料

[1]

吴恩达老师课程原地址: https://study.163.com/course/courseMain.htm?courseId=1004570029

0 人点赞