隔离森林和平均/预期深度公式

机器算法验证 大车 异常检测 隔离森林
2022-04-16 22:01:31

隔离森林算法(Liu、Fei Tony、Kai Ming Ting 和 Zhi-Hua Zhou。“隔离森林。”2008 第八届 IEEE 国际数据挖掘会议。IEEE,2008。-链接:https ://cs.nju.edu .cn/zhouzh/zhouzh.files/publication/icdm08b.pdf?q=isolation-forest ) 尝试根据通过递归(二进制)随机拆分它们获得的树深度为观察分配异常分数每次从随机列观察到的范围内的值,直到观察在树枝中单独存在,因为较少的观察将需要较少的分裂才能成为孤立的。

在描述隔离森林算法的原始论文中,它指定,由于异常值是那些需要少于平均数量的分割才能成为孤立的值,并且目的只是为了捕捉异常值,所以树会一直建立,直到一定的高度限制(对应于完美平衡二叉搜索树的高度 -log2(n)),并且如果在已经达到其高度限制的树中存在超过 1 个观察值/行,则当观察值落入该节点时,它将向其添加该树的样本大小的预期路径长度以获得最终路径长度:

在此处输入图像描述

论文中预期路径长度的公式如下:

c(n)=2H(n1)(2(n1)/n)

H(i)=log(i)+0.5772156649

现在,据我了解,该公式的目的是计算平均深度,如果该过程继续用于随机划分观察的树木。如果有 3 个观察值,则有 2 种可能的方法可以使用二叉树将它们完全拆分:

    .
   / \
  .   o
 / \
o   o
-----------
  .
 / \
o   .
   / \
  o   o

两者的可能性相等,两者下的平均路径长度为(1+2+2)/3=1.67,但公式给出c(3)=1.21. 同样,对于 4 次观察,有 3 种可能的方式来构建树(加上与水平镜像完全相同的方式):

    .
   /  \
  .    .
 /\    /\
o  o  o  o
------------
  .
 / \
o   .
   / \
  o   .
     / \
    o   o
------------
    .
   / \
  o   .
     / \
    .   o
   / \
  o   o

在第一种情况下,平均路径长度为2, 而在其他人中是(1+2+3+3)/4=2.25,但第一个有一个13如果随机拆分元素,则被选中的概率,总体平均值为213+2.2523=2.167,但公式再次给出了一个较低的数字:c(4)=1.85.

我是否理解错误?公式是什么意思?我知道实际的平均路径长度会根据数据的分布而有所不同(例如,如果存在异常值,随机均匀分割的平均路径长度将高于预期平均值的可能性更高,因为会有更多的分割具有比平衡结构更长的结构),但无论如何,该论文的公式给出的数字低于组合平均值而不是更高。

2个回答

我将在数学部分的其他问题的帮助下回答自己: https ://math.stackexchange.com/questions/3333220/expected-average-depth-in-random-binary-tree-constructed-top-to-底部 https://math.stackexchange.com/questions/52572/do-harmonic-numbers-have-a-closed-form-expression

从上面的答案,随机分割剩余样本大小时的实际预期深度n给出,其中是 n 的谐波该论文给出了公式,它给出了相同的结果(https://en.wikipedia.org/wiki/Harmonic_number#Identities_involving_harmonic_numbers)。2(H(n)1)H(n)n2H(n1)2n1n

此外,本文使用谐波数的近似值,这是趋于无穷大时的极限(https://en.wikipedia.org/wiki/Harmonic_number#Calculation)。H(n)n

因此,如果确定近似深度的样本量很大,则实际与近似结果将非常接近,将其用于预期平均深度并不是什么大问题(从中计算分数为 ) 在整个数据中。2E[d]c

但是,本文还使用它来确定每个节点末端达到高度限制的预期样本大小,这将是较小的数字,并且可能在近似值与实际结果相距甚远的范围内——这种用法这个近似值对我来说似乎很错误。

的值,论文的近似值和真实值之间的差异实际上相差不到的值,相差不到,但对于,达到高度限制时可以合理预期,差异相当大()。105n>5000103n>500n=42.1666671.85=0.317

更新:现在,很明显,有 3 种计算方法:

  1. c(3)=2H(31)2(31)/3=2(H(3)1)=2(1+1/2+1/31)=1.667
  2. c(3)=2H(31)2(31)/3=2(log(2)+0.57721566)4/3)=1.20739
  3. c(3)=2(H(3)1)=2(log3+0.577215661)=2(1.0986+0.577215661)=1.35

方法1是准确的结果。
method2 在 IForest 论文中是近似的,在 method3 中实现scikit-learn
是公式简化然后近似


当叶节点中的样本大小为 时3可以计算为 1.675827 所有与您的不同计算,我错过了什么?
H(3)=1+1/2+1/3=1.833
H(3)log(3)+0.57721566np.log(3)+np.euler_gamma