Intro

  2008年刘飞、周志华等提出Isolation Forest算法,iforest不借助类似距离、密度等指标去描述样本与其他样本的差异,而是直接去刻画所谓的疏离程度(isolation)。该算法简单、高效,在工业界应用较多(好像没有看到很多case)~
  Isolation Forest算法的逻辑很直观,算法采用二叉树对数据进行split,样本选取、特征选取、split value选取都采用随机化的方式。如果某个样本是异常值,可能需要很少次数就可以切分出来。

算法逻辑

前提假设

前提假设(fewAndDifferent)

  • 异常样本较少few
  • 和正常样本差异较大different

算法思想

  • 异常样本更容易快速落入叶子结点

训练

训练逻辑:

  • 从原始数据中,不放回的抽取部分样本,构建一颗二叉树(iTree即Isolation Tree)
  • 利用集成学习的思想,多次抽取样本,完成多棵iTree的构建。

iTree停止条件:

  • 树达到指定的高度/深度
  • 数据不可再分,即:只包含一条数据,或者全部数据相同

具体的算法如下:

几个小问题:

  • 树的最大深度=ceiling(log(subsimpleSize)),paper里说自动指定,sklearn也是在代码中写死:
    max_depth = int(np.ceil(np.log2(max(max_samples, 2))))
    这个值接近树的平均深度,我们只关注那些小于平均深度的异常值,所以无需让树完全生长
  • Sub-sampling size,建议256即可。大于256,性能上不会有大的提升
  • Number of tree,建议100

预测

PathLength计算逻辑
  类似二分类模型,预测时可输出P(y=1)P(y=1)P(y=1),iforest最终也可以输出一个异常得分。很容易想到用该样本落入叶子结点时,split的次数(即样本落入叶子结点经过的边)作为衡量指标,对于ttt棵树,取平均即可。先看PathLength的计算逻辑:


PathLength计算公式如下:
h(x)=e+c(T.size)h(x) = e + c(T.size) h(x)=e+c(T.size)
其中eee为样本xxx从树的根节点到叶节点的过程中经历的边的个数,即split次数。T.sizeT.sizeT.size表示和样本xxx同在一个叶子结点样本的个数,C(T.size)C(T.size)C(T.size)可以看做一个修正值,表示T.sizeT.sizeT.size个样本构建一个二叉树的平均路径长度。c(n)c(n)c(n)计算公式如下:

c(n)=2H(n−1)−2(n−1)n=2[ln(n−1)+0.5772156649]−2(n−1)n\begin{aligned} c(n)&=2H(n-1)-\frac{2(n-1)}{n}\\ &=2[ln(n-1)+0.5772156649]-\frac{2(n-1)}{n} \end{aligned}c(n)​=2H(n−1)−n2(n−1)​=2[ln(n−1)+0.5772156649]−n2(n−1)​​
其中,0.5772156649为欧拉常数

为何加入这一修正值?
由于树的深度设置为ceiling(log(subsimpleSize))ceiling(log(subsimpleSize))ceiling(log(subsimpleSize)),所以可能大部分样本的PathLength都比较接近,而如果叶子结点的样本数越多,该样本是异常值的概率也较低(基于fewAndDifferent的假设)。另外c(n)c(n)c(n)是单调递增的,总之,加了修正,使得异常和正常样本的PathLength差异更大,可以简单的理解,如果样本快速落入叶子结点,并且该叶子结点的样本数较少,那么其为异常样本的可能性较大。

Anomaly score
样本落入叶子结点经过的边数(split次数),除了和样本本身有关,也和limit length和抽样的样本子集有关系。这里,作者采用归一化的方式,把split length的值域映射到0-1之间。具体公式如下:
s(x,n)=2−E(h(x))c(n)s(x,n)=2^{-\frac{E(h(x))}{c(n)}} s(x,n)=2−c(n)E(h(x))​

其中:

  • h(x)h(x)h(x)为样本在iTree上的PathLength
  • E(h(x))E(h(x))E(h(x))为样本在ttt棵iTree的PathLength的均值
  • c(n)c(n)c(n)为nnn个样本构建一个二叉树的平均路径长度

上述公式,指数部分值域为(−∞,0)(- \infty,0)(−∞,0),因此sss值域为(0,1)(0,1)(0,1)。当PathLength越小,sss越接近1,此时样本为异常值的概率越大。

其他

Paper遗留问题

  • 实验评估逻辑
  • 峰度筛选特征逻辑
  • 判断异常值的阈值怎么定
  • 特征的随机化,是在每一次split时做,还是subsample时候做?

Tricks

  • subsample样本过多,引入较多的正样本,反而会影响模型的效果
  • 特征筛选逻辑,根据峰度筛选

Ref

Paper
Liu, Fei Tony, Kai Ming Ting, and Zhi-Hua Zhou. "Isolation forest."Data Mining, 2008. ICDM’08. Eighth IEEE International Conference on. IEEE, 2008.
Liu, Fei Tony, Kai Ming Ting, and Zhi-Hua Zhou. "Isolation-based anomaly detection."ACM Transactions on Knowledge Discovery from Data (TKDD)6.1 (2012): 3.
Source Code
R源码
Python源码
Blog
知乎-iForest (Isolation Forest)孤立森林 异常检测 入门篇
知乎-机器学习-异常检测算法(一):Isolation Forest

                                         2020-01-06 于南京市江宁区九龙湖

IsolationForest-01原理相关推荐

  1. 相机标定01原理步骤(一)坐标系变换

    本人刚刚入手学习机器视觉,在CSDN记录自己的学习历程,欢迎各位朋友们批评指正! 此文是观看哔哩哔哩的学习笔记. 相机标定 计算机视觉的基本任务之一是从相机获取的图像信息出发计算三维空间中物体的几何信 ...

  2. WebDriver 识别反爬虫的原理和破解方法~

    作者|志斌 来源|python笔记 有时候我们在爬取动态网页的时候,会借助渲染工具来进行爬取,这个"借助"实际上就是通过使用相应的浏览器驱动(即WebDriver)向浏览器发出命令 ...

  3. TF-IDF和BM25算法原理及python实现

    目录 前言 一.TF-IDF TF定义: 逆文本频率指数(Inverse Document Frequency,IDF) TF-IDF(Term Frequency-inverse Document ...

  4. 【自动微分原理】具体实现方式

    第一篇自动微分原理文章中我们大概初步谈了谈从手动微分到自动微分的过程,第二篇自动微分正反模式中深入了自动微分的正反向模式具体公式和推导. 实际上第二章了解到正反向模式只是自动微分的原理模式,在实际代码 ...

  5. 检验两组数据是否显著差异_SPSS非参数两个相关样本检验

    01 原理与方法 两个相关样本检验的方法主要有:Wilcoxon检验.Sign(符号)检验.McNemar检验和Marginal Homogeneity(边际同质性)检验等. Sign(符号)检验 配 ...

  6. python如何调用图片-python调用图片

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python本身也有识别图片转文字的框架,但是相比调用接口,识别的精度就略显不行 ...

  7. 萤火虫算法_智能优化算法萤火虫算法

    今天介绍的算法是萤火虫算法(Firefly Algorithm,简称FA),也是一种仿生优化算法.从算法名字就知道了,该算法的思想来源于萤火虫,具体是萤火虫的闪烁行为.下面是展开对算法相关内容的介绍. ...

  8. 朴素贝叶斯算法_机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

  9. 机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

  10. matlab图像去毛刺_警微圈 图像处理第三讲CLAHE

    警微圈 图像处理100讲 第三讲 <限制对比度自适应直方图均衡化> - 圈语 - 为给圈粉们提供一些结合公安工作的实用图像处理方法,小编为大家准备了一些程序处理算法(附带代码).小编使用的 ...

最新文章

  1. Spring+Hibernate项目在weblogic中部署的一些问题
  2. 聊天机器人之语料准备
  3. MySQL主从同步失败
  4. Spring自定义属性编辑器PropertyEditorSupport + 使用CustomEditorConfigurer注册属性编辑器...
  5. DeepID2——强大的人脸分类算法
  6. A Simple Problem with Integers POJ - 3468(线段树+区间查询+区间修改+建树+懒惰标记模板)+(树状数组)
  7. java中什么时候应用异常_生产Java应用程序中的十大异常类型-基于1B事件
  8. 伟大公司为什么需要技术型领导?
  9. 学习进度表(160519更新)
  10. Mysql私有增强性命令小记
  11. MacOS上的一些隐藏的快捷小技巧
  12. 共青城市大力推进国家智慧城市试点建设
  13. 鸿蒙系统下载 绿色,WiseFolderHider(文件夹加密软件)4.3.7
  14. c语言答案计算鸡兔同笼,鸡兔同笼-题解(C语言代码,思路清晰,简单易懂)
  15. 控制算法简析3——LKA中PID控制的error选取
  16. Android 在导航栏上添加一个截屏按键,点击进行截屏
  17. 《上瘾》学习笔记(第一、二章)
  18. 第3章-2 查验身份证
  19. 1.1 计算机语言发展史以及未来方向
  20. 2021-2022下沉市场研究报告合集(共46份)

热门文章

  1. string转数组,数组转list
  2. ATL炒冷饭学习之三:CoInitialize/CoUninitialize
  3. Windows系统给文件加上备注信息
  4. react全家桶都有什么
  5. 一键空中“画”窗户!MIT和IBM联合发布“GAN 绘画工作室”
  6. 大一经历 不全是 寥寥草草应付申报单项奖
  7. js文件下载 (url下载,监听进度)视频下载、图片下载、apk下载
  8. python窗口函数
  9. java计算机毕业设计积分权益商城源码+mysql数据库+系统+lw文档+部署
  10. 快消行业应该如何加强销售管理