Machine Learning第九讲【异常检测】-- (二)创建一个异常检测系统

一、Developing and Evaluating an Anomaly Detection System(异常检测系统的衡量指标)

对于某一算法,我们可以通过借助某些数字指标来衡量算法的好坏,仍旧以飞机引擎的例子来说:

假设有10000个正常的引擎,20个有瑕疵的引擎(异常)

我们将这些 引擎分为以下数据集:

  • 训练集:使用6000个正常的引擎(y=0)
  • 交叉验证集:使用2000个正常的引擎(y=0),10个异常的引擎(y=1)
  • 测试集:使用2000个正常的引擎(y=0),10个异常的引擎(y=1)

也就是10000个正常的引擎在训练集、交叉验证集和测试集里面都有,且这三个数据集中没有重合的数据。

当然,也有一部分人这样分类:

  • 训练集:使用6000个正常的引擎(y=0)
  • 交叉验证集:使用4000个正常的引擎(y=0),10个异常的引擎(y=1)
  • 测试集:使用4000个正常的引擎(y=0),10个异常的引擎(y=1)

但是我们并不赞成第二种分类方法,因为它的交叉验证集和测试集使用的是同一组数据。
接下来,对于算法的评估过程如下:
(1)使用训练集训练模型p(x)
(2)使用模型p(x)在交叉验证集上做预测,若p(x)<ε,则预测值y=0,若p(x)≥ε,则预测值y=1。
因为预测异常点,这里面的数据肯定会比较偏斜,即正常的样本(y=0)比较多,而异常样本(y=1)比较少,因此使用Accuracy会产生虽然Accuracy高但是预测效果并不好的情况。我们可以采用下面的指标来衡量:
True Positive, False Positive, False Negative, True Negative
Precision/Recall
F1-score
我们可以选出交叉验证集中F1-score最大值时对应的ε值,作为衡量指标ε。我们也可以使用交叉验证集来评价算法,确定应该选择哪些特征。

二、Anomaly Detection vs. Supervised Learning(异常检测 vs. 监督学习)

我们应该什么时候使用异常检测,什么使用监督学习呢?

异常检测    
(1)正样本(y=1)(正样本的数量一般是0-20,也可能是50)的数量比较少(very small)--可以将这些正样本存为交叉验证集和测试集
负样本(y=0)的数量有很多(large)--用大部分的负样本训练模型,因此只要有足够的负样本,便可以很好地拟合数据
(2)异常检测有很多种类型,我们很难从数目较多的正样本中学习出模型来预测未知的样本,因为未知的样本异常的原因可能多种多样,而且可能是之前没有见过的类型。(以飞机引擎为例,异常可能有很多种原因,可能是一个零件的损坏,也可能是全部零件的损坏)

监督学习
(1)正样本和负样本的数目都很多。
(2)有足够数目的正样本用来训练模型,而且未来需要预测的样本和模型中训练样本较为相似,这种情况需要使用监督学习算法。(可能我们会觉得垃圾邮件的例子也很很多分类,那为什么不适用异常检测而使用监督学习呢?因为虽然垃圾邮件的类型有很多,但是我们垃圾邮件的训练样本也有很多,因此使用监督学习算法)

 

实践中,异常检测和监督学习的例子有哪些?

异常检测
诈骗预测--虽然诈骗预测一般使用异常检测,但是如果有大量欺诈用户的数据,预测模型能够预测未知数据,我们倾向于使用监督学习算法
工业界,如飞机引擎的检测
数据中心用来检测数据是否异常

监督学习
垃圾邮件分类
天气预测,根据已有数据预测未来的天气趋势(晴天/阴天等)
癌症分类

 

三、Choosing What Features to Use(如何选择特征?)


首先,如果根据特征画出来的图形和高斯分布的图形相差比较大,则我们需要对特征做一些处理,使得图形与高斯分布的图形相似,这样能够提高预测准确率,具体如下图:

上面的图形与高斯分布的图形很类似,所以我们不需要处理,而对于下面的图形,因其与高斯分布图形相差太大,所以我们需要处理,可以使用log,或者开平方等函数。

将图形变成高斯分布之后,有利用我们进行预测,那我们应该怎么进行异常检测中的错误分析呢?

我们期望对于normal的样本,p(x)的值大一些,对于anomalous的样本,p(x)的值小一些
但是,大多数的情况是:无论是对于normal的样本还是anomalous的样本,p(x)都很大或者都很小
面对这种情况,我们需要找出那些预测错误的样本(无论是normal还是anomalous),找出其共有特征,看看是否可以提取出一些新特征来提高预测准确率,来看下面的例子:

左图是原始的图形,它只包含一个特征x1,其中A点是一个异常点,但是A点对应的p(x)还是比较大的,因此在预测的时候它是被错误预测的,即预测值y=0,将其预测为normal,但是其是anomalous的。我们分析之后发现其有一个特征x2,因为我们加入特征x2,加入x2之后,所有样本的分布图如右图,这时候,可能红圈之内的样本被预测为normal,红圈之外的样本被预测为anomalous,因此在含有2个特征的情况下,这个异常样本是可以被检测出来的,这样也就提高了预测的准确率。

再举一个数据中心检测的例子:

我们在选择特征时,需要会选择那些取值不是很大也不是很小的特征,比如:

x1 = memory use of computer
x2 = number of disk accesses/sec
x3 = CPU load
x4 = network traffic
我们将下来想知道哪些地方出现问题了,我认为CPU load和network traffic应该互为线性关系,在程序运行的过程中,发现有一组数据CPU load和network traffic都很大,但是怀疑一种情形:在执行的过程中,计算机进入了死循环,因此被卡住了,因此CPU load升高,但是network traffic没有变化,在这种情况下,要检测出异常,我可以新增新的特征:x5 = (CPU load)/(network traffic)或者x6 = (CPU load)^2/(network traffic),这样,若network traffic不变,而CPU load变大,x5或者x6就会出现异常,以便检测。
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值