1. 问题定义
异常检测的目的就是,当新进来一个样本的时候,我们需要辨识这个样本和现有的训练集合{}是否相似,如果相似就是正常的,如果不相似,那就是异常的。
2. 异常检测的应用
可用于欺诈检测领域,normal的训练数据就是正常的刷卡行为,anomaly的数据就是盗刷的行为。
也可以应用于网络注入检测领域,正常的网络连线是normal的,具有攻击行为的网络注入就是anomaly的。
还可以用于癌症的检测,正常的细胞行为是normal的,癌细胞就是anomaly的。
3. 可以简单的当成二分类问题来处理吗?
如果要当成二分类问题来处理,那做法就是,收集normal的数据作为Class1,再收集anomaly的数据作为Class2,根据两个类别的数据做二分类。
但是有这样两个棘手的问题:
1. 收集normal的数据很简单,但是很难将所有的anomaly的数据收集全,例如下面的例子,这简单举例的三个个体都被认为是anomaly,但是数据远不止这些,你很难get到所有的数据。
2. 在有的训练场景中,你很难得到anomaly的数据,例如在银行信用卡欺诈检测领域,你收集到的数据大部分都是正常的用户,关于欺诈用户,是很少的。
4. 异常检测的类别
异常检测问题可以分成两大类:
第一类:你有一批训练数据{},你的训练数据也有对应的标签{}。但是当新进来的数据都不属于任何一个label的时候,机器应该输出“unknown”。
第二类:你只有训练数据,但是训练数据没有label。而且这时你的训练数据也分为clean和polluted两方面。clean指的是你的训练数据全部都是normal的,但是这种情况很少;通常情况下你的数据是被“污染”的,也就是说你的训练数据中掺杂着一些anomaly的数据。例如,欺诈检测的数据中不仅含有正常用户,也有异常用户。