Developing and Evaluating an Anomaly Detection System
异常检测算法是一个非监督学习算法,我们无法根据结果变量y的值来判断数据是否真的为异常数据。因此,我们仍旧采用之前的数值评估法来帮助我们对学习算法进行评估。
具体应用
以飞机引擎为例,假设我们有1000台正常的引擎数据和20台异常的引擎数据。我们将数据按如下划分:
- 6000台正常的引擎数据作为训练集
- 2000台正常的引擎数据和10异常的引擎数据作为交叉验证集
- 2000台正常的引擎数据和10异常的引擎数据作为测试集
注:此例子中所有数据均为带标签的数据,即形如(x(i), y(i))。
其评估算法为:
- 使用p(x)模型拟合训练集{x(1), ···, x(m)}
- 使用不同的ε值预测交叉验证集(或测试集)上的数据,并计算F1值
- 当F1值最大时,选取对应的ε值作为阀值
- 对测试集进行预测,计算F1值
Anomaly Detection vs. Supervised Learning
在上一节中,我们使用带有标签的数据,这和监督学习类似。为了加以区别,我们将异常检测和监督学习对比一下。
异常检测 | 监督学习 |
---|---|
数据集含有少量的正向数据(即异常数据,y = 1),大量的负向数据(即正常数据,y = 0) | 数据集同时含有大量的正向数据和负向数据 |
由于存在许多类型的异常,很难根据少量的正向数据训练算法,并且在未来也可能遇到未知的异常类型 | 有足够多的正向数据训练算法,未来遇到的正向数据与训练集中的类似 |
常用于以下情况:1. 欺诈行为检测;2. 生产过程(如:飞机引擎生产过程等);3. 数据中心计算机监控;··· | 常用于以下情况:1. 垃圾邮件过滤器;2. 天气预报;3. 肿瘤预测;··· |
Choosing What Features to Use
在之前的介绍中,异常检测是基于数据满足高斯分布的条件。实际上,数据的分布即使不满足高斯分布,异常检测也能够正常运行。但我们还是推荐将不满足高斯分布的数据转换成满足高斯分布,例如使用对数函数(x = log(x + c),其中c为非负常数);或者使用幂运算(x = xc,其中c为0~1之间的分数);···
误差分析
在上图的直方图中,绿色标记点为异常数据,但由于其p(x) > ε,异常检测算法未能发现这一异常数据。对于这种问题,我们通常根据异常数据构建新的特征变量x2,这样我们的异常检测算法才能发现该异常数据。
对于上图中的例子,该数据中心提供网络服务,因此,正常情况下,CPU负载和网络流量变化成线性关系。但现假设在网络流量无明显变化下,CPU负载很高,此时异常检测算法并未这一情况发出异常警告。
这时我们怀疑是CPU出现异常了,因此,我们需要构建上图中的新特征变量x5或者x6。
Question:
Suppose your anomaly detection algorithm is performing poorly and outputs a large value of p(x) for many normal examples and for many anomalous examples in your cross validation dataset. Which of the following changes to your algorithm is most likely to help?
A. Try using fewer features.
B. Try comping up with more features to distinguish between the normal and the anomalous examples.
C. Get a large training set (of normal examples) with which to fit p(x).
D. Try changeing ε.
答案为B。