异常检测的学习笔记并非原创,而是搜索各位大佬的帖子整理而得。如有冒犯,请联系我。
前几张所叙述的模型基本是处理低位数据的,随着维度的增加,数据空间的⼤小(体积)会以指数级别增⻓,使数据变得稀疏,这便是维度诅咒的难题。
维度诅咒不⽌给异常检测带来了挑战,对距离的计算,聚类都带来了难题。在⾼维场景下,⼀个常⽤的⽅法是⼦空间⽅法。
集成是⼦空间思想中常⽤的⽅法之⼀,可以有效提⾼数据挖掘算法精度。集成⽅法将多个算法或多个基检测器的输出结合起来。常见的集成算法有Feature Baggingd
,Isolation Forests
1. Feature Bagging
Feature Bagging,基本思想与bagging相似,只是对象是feature。集成⽅法的设计有以下两个主要步骤:
1.1 步骤
- 选择基检测器:这些基本检测器可以彼此完全不同,或不同的参数设置,或使⽤不同采样的⼦数据集。
- 分数标准化和组合⽅法:不同检测器可能会在不同的尺度上产⽣分数。
需要将来⾃各种检测器的分数转换成可以有意义的组合的归⼀化值。分数标准化之后,还要选择⼀个组合函数将不同基本检测器的得分进⾏组合,最常⻅的选择包括平均和最⼤化组合函数。
⼴度优先⽅法⾸先将所有异常检测向量排序到排序向量 中,并返回给出得分向量的排序元素与排序向量的原始元素之间的对应关系的索引 。
参考链接:算法——广度优先搜索
2. Isolation Forests
孤⽴森林(Isolation Forest)算法是周志华教授等⼈于2008年提出的异常检测算法,不断对特征空间进行划分。异常点一般在root的上面,在2008年提出来,南京大学周志华老师提出,利用了集成学习的方法,可以并行,同时生成多棵树。也可以用于高维数据。
如何导入
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
⽆须标注样本,在⼯业界应⽤⼴泛。孤⽴森林属于⾮参数和⽆监督的算法,既不需要定义数学模型也不需要训练数据有标签。假设我们⽤⼀个随机超平⾯来切割数据空间,切⼀次可以⽣成两个⼦空间。
⽤四个样本做简单直观的理解,d是最早被孤⽴出来的,所以d最有可能是异常。
孤⽴森林也是⼀种基于⼦空间的⽅法,孤⽴森林检测异常的假设是:异常点⼀般都是⾮常稀有的,在树中会很快被划分到叶⼦节点,因此可以⽤叶⼦节点到根节点的路径⻓度来判断⼀条记录是否是异常的。
3. 总结
- feature bagging可以降低⽅差
- 孤⽴森林不适⽤于超⾼维数据,因为⿎励森林每次都是随机选取维度,如果维度过⾼,则会存在过多噪⾳。