IsolationForest-01原理
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原理相关推荐
- 相机标定01原理步骤(一)坐标系变换
本人刚刚入手学习机器视觉,在CSDN记录自己的学习历程,欢迎各位朋友们批评指正! 此文是观看哔哩哔哩的学习笔记. 相机标定 计算机视觉的基本任务之一是从相机获取的图像信息出发计算三维空间中物体的几何信 ...
- WebDriver 识别反爬虫的原理和破解方法~
作者|志斌 来源|python笔记 有时候我们在爬取动态网页的时候,会借助渲染工具来进行爬取,这个"借助"实际上就是通过使用相应的浏览器驱动(即WebDriver)向浏览器发出命令 ...
- TF-IDF和BM25算法原理及python实现
目录 前言 一.TF-IDF TF定义: 逆文本频率指数(Inverse Document Frequency,IDF) TF-IDF(Term Frequency-inverse Document ...
- 【自动微分原理】具体实现方式
第一篇自动微分原理文章中我们大概初步谈了谈从手动微分到自动微分的过程,第二篇自动微分正反模式中深入了自动微分的正反向模式具体公式和推导. 实际上第二章了解到正反向模式只是自动微分的原理模式,在实际代码 ...
- 检验两组数据是否显著差异_SPSS非参数两个相关样本检验
01 原理与方法 两个相关样本检验的方法主要有:Wilcoxon检验.Sign(符号)检验.McNemar检验和Marginal Homogeneity(边际同质性)检验等. Sign(符号)检验 配 ...
- python如何调用图片-python调用图片
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python本身也有识别图片转文字的框架,但是相比调用接口,识别的精度就略显不行 ...
- 萤火虫算法_智能优化算法萤火虫算法
今天介绍的算法是萤火虫算法(Firefly Algorithm,简称FA),也是一种仿生优化算法.从算法名字就知道了,该算法的思想来源于萤火虫,具体是萤火虫的闪烁行为.下面是展开对算法相关内容的介绍. ...
- 朴素贝叶斯算法_机器学习第三篇:详解朴素贝叶斯算法
一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...
- 机器学习第三篇:详解朴素贝叶斯算法
一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...
- matlab图像去毛刺_警微圈 图像处理第三讲CLAHE
警微圈 图像处理100讲 第三讲 <限制对比度自适应直方图均衡化> - 圈语 - 为给圈粉们提供一些结合公安工作的实用图像处理方法,小编为大家准备了一些程序处理算法(附带代码).小编使用的 ...
最新文章
- 哈佛大学 NLP 组开源神经机器翻译系统 OpenNMT
- 如何在freemarker寻找元素_如何让你的网站ui设计更加优秀
- Windows下Mysql Cluster集群启动脚本与启动服务添加方法
- 第一人称视角获得运动方向和视角的夹角
- hdu 5374 Tetris(模拟)
- 实践2.2 内核模块编译
- linux sql命令行查询语句不要换行_面试刷题mysql1:一条sql语句是如何经过mysql的体系结构的?...
- urdf 学习笔记一
- httpclient 下载文件
- /etc/fstab文件 详解
- Unmapped Spring configuration files found. Please configure Spring facet or use ‘Create Default Con
- 2017.10.23 Arduino Atmel EFM32低功耗监测
- android把后台应用放最上层,Android 判断app是否在最上层展示
- python修改key名_python修改字典键(key)的方法
- 一瓶OTC,药店被罚10万,原因是...
- JPEG2000压缩DICOM文件的解压(三)
- 智能家居中控屏(一):产品介绍
- 3ds Max 2017
- Win10系统出现edge主页被劫持篡改的问题
- Beaglebone black 蚂蚁矿机L3+控制板 NFS挂载网络文件系统