高维异常检测的解决方法主要包括:
Feature Bagging
孤立森林
高维即维度数比较高,随之数据空间的体积也会以指数级别增长,以距离为方法会失效,常用的方法为子空间,而子空间中思想常用的方法为集成方法。
集成方法:
一句话形容是将多个算法或多个基检测器的输出结合起来。一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。
集成方法与基于子空间方法有着天然的相似性,子空间与不同的点集相关,而集成方法使用基检测器来探索不同维度的子集,将这些基学习器集合起来。
- feature bagging
Feature Bagging是对样本的特征进行重抽样得到多个数据集,再使用一组(多个)模型对这些数据集进行训练。
步骤1:选择基检测器
基本检测器可以彼此完全不同,或不同的参数设置,或使⽤不同采样的⼦数据
集。Feature bagging常⽤lof算法为基算法
下图是通用算法:
数据集S,其中每一个x都对应一个y,此数据集由异常值和普通值组成,标签C为异常值,NC为普通值。
随机选择T个特征值的子集Nt: - 特征个数T是随机确定的,服从[d/2, d-1]均匀分布;
- 确定特征个数后,特征也是随机抽取的,创造一个特征子集Ft;
- 对特征子集使用异常检测算法,输出异常分数
- 最终把异常分数向量与输出联合
步骤2:分数标准化和组合方法
不同检测器可能会在不同的尺度上产⽣分数。例如,平均k近邻检测器会输出原始距离分数,而LOF算法会输出归⼀化值。另外,尽管⼀般情况是输出较⼤的异常值分数,但有些检测器会输出较小的异常值分数。因此,需要将来⾃各种检测器的分数转换成可以有意义的组合的归⼀化值。
分数标准化之后,还要选择⼀个组合函数将不同基本检测器的得分进⾏组合,最常⻅的选择包括
平均和最⼤化组合函数
下图为两个feature bagging 两个不同组合分数方法(广度方法):
给定T个异常检测分数向量ASt,对这T个向量进行分类,如分成SAS(l)与Ind(l),SAS(l)为分数最大值,indice为分数中排序元素与原始元素S对应的指标,例如:Indt(l)=k表示在第t个异常检测得分向量ASt中,数据记录xk具有最高的异常得分ASt(k).
⼴度优先⽅法只需从所有异常值检测算法中获取异常值最⾼的数据记录,并将其索引插⼊向量Indfinal中,然后获取异常得分第⼆⾼的数据记录
AS1,1为被算法1列为最可能为离群值的数据记录,AS1,2为被算法1列为第2可能为离群值的数据记录;广度优先算法先获取所有检测算法中异常值最高的数据记录,再获取得分第2的数据记录,索引插入向量indefinal,以此类推。如果数据索引出现在了indefinal中,则跳过不追加该索引。
一些指标:
方差:是指算法输出结果与算法输出期望之间的误差,描述模型的离散程度,数据波动性。
偏差:是指预测值与真实值之间的差距。即使在离群点检测问题中没有可⽤的基本真值
代码实现如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pyod as py
from pyod.utils.data import generate_data
from pyod.models.feature_bagging import FeatureBagging
from pyod.models.lof import LOF
from pyod.utils.example import visu