前言
HBOS(Histogram-based Outlier Score)核心思想:将样本按照特征分成多个区间,样本数少的区间是异常值的概率大。
原理
该方法为每一个样本进行异常评分,评分越高越可能是异常点。评分模型为:
假设样本p第 i 个特征的概率密度为Pi ,则p的概率密度可以计算为(多个特征的概率密度的乘积):
两边取对数:
概率密度越大,异常评分越小,则两边乘以“-1”:
即:
如何计算概率密度,特别是对于连续型数据?最简单的方法是对连续数据进行离散化。离散化的基本思想是设置“断点”,将数据分割成若干个区间。其中,“断点”的设置可以是静态的,也可以是动态的。
对于样本集D,设置合适的“断点”集合,将特征的取值分割成若干个区间。统计区间的样本数,可以构建一个频数直方图H。假设第 i 个特征分割成m 个区间,每个区间统计的样本个数分别为:
频率(概率)分布表
明显,根据频数直方图H可以计算出所有特征的频率分布。
为什么频率越大,异常评分越小?
上图是特征c的样本分布例图。直观上,B样本是异常点,A点是正常点。由于,样本A(样本B)关于特征c的概率密度估计可以用特征c在相应区间的频率来近似。显然,特征的取值频率越大,样本的关于该特征的异常评分越小。
优缺点
优点:
算法原理简单,复杂度低。
缺点:
1、难以确定最佳的带宽(即每个区间的长度)。
2、高维情形下的效果不佳。
3、特征相互独立的条件比较强。
适用场景
适用于样本维度低的大数据场景。
参数详解
from pyod.models.hbos import HBOS
HBOS(n_bins=10, alpha=0.1, tol=0.5, contamination=0.1)n_bins:样本划分为多少个区间。默认10。contamination:污染度
总结
该算法针对大数据场景特别好用,但是异常识别的效果一般,且针对特征间比较独立的场景。直白点讲该算法就是把数据划分为多个区间,然后根据每个区间的频次根据概率密度函数转化为对应的出现概率,在将这个概率转化为异常分数,以此来区分异常数据。