zoukankan      html  css  js  c++  java
  • 如何开发一个异常检测系统:如何评价一个异常检测算法

    利用数值来评价一个异常检测算法的重要性

    使用实数评价法很重要,当你用某个算法来开发一个具体的机器学习应用时,你常常需要做出很多决定,如选择什么样的特征等等,如果你能找到如何来评价算法,直接返回一个实数来告诉你算法的好坏,那样你做决定就会更容易一些。如现在有一个特征,要不要将这个特征考虑进来?如果你带上这个特征运行你的算法,再去掉这个特征运行你的算法,得到返回的实数,这个实数直接告诉你加上这个特征算法是变好了还是变坏了,这样你就有一种更简单的算法来确定是否要加上这个特征。

    为了更快地开发出一个异常检测系统,那么最好能找到某种评价异常检测系统的方法。

    为了能评价一个异常检测系统,假定已有一些带标签的数据,其中有正常的样本也有异常的样本(正常的样本y=0,异常的样本y=1)

    对于训练集,我们还是看成无标签的样本,将它们都看成无异常的样本(其中可能有一些有异常的样本被分到训练集中)

    定义交叉验证集与测试集,通过这两个集合得到异常检测算法。我们假设交叉验证集与测试集中的样本都是异常的,即测试集里面的样本y=1(表示异常样本)。

    具体的例子

    有10000个正常的飞机引擎,有20个有问题的飞机引擎,从以往经验来看,无论是制造了多少年的飞机引擎工厂,都会得到大概20个有问题的引擎。对于异常检测典型的应用来说,异常样本的个数通常都是20-50个这样的个数,并且通常我们的正常样本数量要大得多。

    我们将数据分成训练集,交叉验证集和测试集,典型的分法是:将10000个好的引擎样本中的6000个放入trainning set中做为无标签的数据(实际都为正常的样本),将剩下的正常的样本中的2000个样本放入交叉验证集中,另2000个样本放入测试集中(正常样本的分配比例是6:2:2);将有异常的20个样本,其中10个放入CV中,另外10个放入Test中。

    另一种常见的分配方法(不推荐这样做)是将CV与Test的样本混合起来使用,将剩下的4000个好的样本即做为CV也做Test使用(不推荐这样做)

     异常检测算法的推导与评估

    异常检测算法的推导与评估算法如下:首先我们使用训练样本(虽然都是是无标签的样本但其实都是正常的样本)来拟合模拟p(x)(即参数估计出u,σ的值)

    对于CV与Test里面的数据,我们利用算法对y进行预测,然后来评价预测的准确率。如何来度量呢?

    因为数据是非常偏斜的(正常的数据多,异常的数据少),因此分类准确率不是一个好的度量方法,算出查准率、召回率以及F1值,通过这些方法来评价我的异常检测算法在CV以及Test中的表现。

    怎么决定ε的值呢?交叉验证集上来决定取什么ε的值,在交叉验证集上尝试多个不同的ε的取值,然后选出一个使得F1值最大的那个ε的值,即在交叉验证集上表现最好的那个ε的值。当我们需要做出决定时(如选哪个特征,选哪个ε的值),我们可以不断地使用交叉验证来评价这个算法的好坏,然后决定我们要选取哪个特征,选哪个ε的值。

    当找到ε的值后,我们的异常检测算法就确定了,然后使用Test集来评价算法的表现

    总结

     1>如何评价一个异常检测算法:使用F1值,在交叉验证集上做出决定如何选择ε(确定ε的大小)以及应该包括哪些特征等

  • 相关阅读:
    【算法学习笔记】27.动态规划 解题报告 SJTU OJ 1254 传手绢
    【算法学习笔记】26.扫描维护法 解题报告 SJTU OJ 1133 数星星
    【算法学习笔记】25.贪心法 均分纸牌问题的分析
    【算法学习笔记】24.记忆化搜索 解题报告 SJTU OJ 1002 二哥种花生
    【算法学习笔记】23.动态规划 解题报告 SJTU OJ 1280 整装待发
    【算法学习笔记】22.算法设计初步 二分查找 上下界判断
    【算法学习笔记】21.算法设计初步 求第k个数 划分法 快排法
    【算法学习笔记】20.算法设计初步 归并排序 求逆序数
    【算法学习笔记】19.算法设计初步 最大子列和问题的几种方法
    【算法学习笔记】18.暴力求解法06 隐式图搜索2 八数码问题 未启发
  • 原文地址:https://www.cnblogs.com/yan2015/p/7401680.html
Copyright © 2011-2022 走看看