孤立森林

目录

  • 原理
  • 适用场景
  • sklearn参数
    • 训练参数
    • 模型具有的方法
  • 相关链接

原理

1.bagging
  构造每一棵孤立树时,使用有放回的抽样,默认值是抽取256个样本
2.随机选取维度
3.默认构建100棵树,每棵树的最大高度是8
4.异常得分
  设: h ( x ) h(x) h(x)为点 x x x从itree的根节点到叶子节点所经过的路径长度
     c ( n ) c(n) c(n)是给定 n n n的情况下,路径的平均值。
c ( n ) = 2 H ( n − 1 ) − 2 n − 1 n c(n) = 2H(n-1)-2\frac{n-1}{n} c(n)=2H(n1)2nn1
    其中 n n n是实例数, H ( i ) = l n ( i ) + 0.5772156649 H(i)=ln(i) + 0.5772156649 H(i)=ln(i)+0.5772156649
  异常得分 s ( x , n ) s(x,n) s(x,n)
s ( x , n ) = 2 − E ( h ( x ) ) c ( n ) s(x,n)=2^{-\frac{E(h(x))}{c(n)}} s(x,n)=2c(n)E(h(x))
孤立森林_第1张图片

E ( h ( x ) ) → c ( n ) E(h(x)){\rightarrow}c(n) E(h(x))c(n), s → 0.5 s {\rightarrow}0.5 s0.5,也就是说 x x x的路径趋近于路径平均值时,难以区分 x x x是正常还是异常;
E ( h ( x ) ) → 0 E(h(x)){\rightarrow}0 E(h(x))0, s → 1 s{\rightarrow}1 s1,也就是当 x x x的路径期望趋近于0时,基本就可以判断为异常点;
E ( h ( x ) ) → ( n − 1 ) E(h(x)){\rightarrow}(n-1) E(h(x))(n1), s → 0 s{\rightarrow}0 s0,也就是当 x x x的路径期望趋近于样本数时,判定 x x x为正常样本。

适用场景

  1. 异常值‘少而不同’
    :当样本数量过多,可能造成部分正常样本靠近异常样本,影响隔离进程;也可能会使异常样本形成比较密集的簇,相应的拉长了隔离异常样本所需的路径,使其难以与正常样本区分。
      一种理想的情况是,每种异常都只有很少量的数据甚至一条数据,明显的区别于正常簇,这样隔离进程会更高效。
    不同:由于算法里面是随机选取维度,使用超平面随机隔离,异常值在这些维度上面明显区别于正常值,隔离效果更好。
  2. 特征连续
    隔离是使用超平面,特征连续的情况表现更好
  3. 维度不高
    原文中提到孤立森林也不能避免维度灾难,但是可以通过使用简单的峰度测试筛选维度,也能达到较高的准确率。但是仍旧不是很适合高维度数据,因为训练时的维度是随机选取的,会造成大量的维度浪费和噪声。
    那么多少维算是高维呢,由于默认100棵树,每次随机选择一个维度做训练,所以100维左右应该都不能算是高维。而且原论文里对6维数据加了506维度的噪声,才说是高维。
  4. 无监督
    孤立森林可以仅仅使用正常样本来训练,虽然效果会有下降(原文里的准确率还是非常高),只要适当的增加采样数,还能提高效果。
    这个原因可能是说,虽然是仅仅用正常样本进行的训练,当用来做预测时,异常样本很可能达到所设置的最大路径,计算异常得分时,仍然是高于正常样本。

sklearn参数

训练参数

IsolationForest(n_estimators=100, max_samples=’auto’,
 				contamination=’legacy’, max_features=1.0, bootstrap=False, 
 				n_jobs=None, behaviour=’old’, random_state=None, verbose=0)
参数 数据类型 释义
n_estimators int 孤立树的数量,默认值是100
max_samples int or float 训练每颗孤立树时的采样数
可以是整数值,也可以是小数比例值
默认值是256
contamination  float in (0., 0.5) 数据集中异常值的比例,用于定义决策函数的阀值
默认值是0.1
max_features int or float 用于训练每个孤立树的特征数
默认值是1
bootstrap  boolean True:每颗孤立树都在放回条件下进行随机采样
False:不放回采样
默认值是False
n_jobs int or None 并行运行数
默认值是1
behaviour  str(new/old) 决策函数版本
默认值是old
random_state int, RandomState instance or None 如果是int, random_state是随机数生成器使用的种子;如果是RandomState instance,random_state是随机数生成器;如果None,随机数生成器是np.random使用的RandomState实例。
默认值是None
verbose  int, optional 控制树构建过程的详细程度
默认值是None

模型具有的方法

方法 释义
fit(X,sample_weight) 训练,可以指定样本权重
predict(X) 预测,返回1/-1
fit_predict(X) 训练+预测
decision_function(X) 计算异常得分
get_params([deep]) 获取此估计器的参数
deep=True,返回该估计器的参数和包含的估计器子对象
score_samples(X) 异常得分
set_params(**params) 设置参数

相关链接

[1] http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/icdm08b.pdf
[2] https://blog.csdn.net/u013709270/article/details/73436588
[3] https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html

你可能感兴趣的:(孤立森林)