当前位置: 首页 > 编程日记 > 正文

异常检测算法:Isolation Forest

iForest (Isolation Forest)是由Liu et al. [1] 提出来的基于二叉树的ensemble异常检测算法,具有效果好、训练快(线性复杂度)等特点。

1. 前言

iForest为聚类算法,不需要标记数据训练。首先给出几个定义:

  • 划分(partition)指样本空间一分为二,相当于决策树中节点分裂;
  • isolation指将某个样本点与其他样本点区分开。

iForest的基本思想非常简单:完成异常点的isolation所需的划分数大于正常样本点(非异常)。如下图所示:

399159-20170809220532464-1204439901.png

\(x_i\)样本点的isolation需要大概12次划分,而异常点\(x_0\)指需要4次左右。因此,我们可以根据划分次数来区分是否为异常点。但是,如何建模呢?我们容易想到:划分对应于决策树中节点分裂,那么划分次数即为从决策树的根节点到叶子节点所经历的边数,称之为路径长度(path length)。假设样本集合共有\(n\)个样本点,对于二叉查找树(Binary Search Tree, BST),则查找失败的平均路径长度为
\[ c(n) = 2H(n-1) -(2(n-1)/n) \]
其中,\(H(i)\)为harmonic number,可估计为\(\ln (i) + 0.5772156649\)。那么,可建模anomaly score:

\[ s(x,n) = 2^{-\frac{E(h(x))}{c(n)}} \]

其中,\(h(x)\)为样本点\(x\)的路径长度,\(E(h(x))\)为iForest的多棵树中样本点\(x\)的路径长度的期望。特别地,

399159-20170809220544839-380213602.png

\(s\)值越高(接近于1),则表明该点越可能为异常点。若所有的样本点的\(s\)值都在0.5左右,则说明该样本集合没有异常点。

2. 详解

iForest采用二叉决策树来划分样本空间,每一次划分都是随机选取一个属性值来做,具体流程如下:
399159-20170809220558699-1531874726.png

停止分裂条件:

  • 树达到了最大高度;
  • 落在孩子节点的样本数只有一个,或者所有样本点的值均相同;

为了避免错检(swamping)与漏检(masking),在训练每棵树的时候,为了更好地区分,不会拿全量样本,而会sub-sampling样本集合。iForest的训练流程如下:

399159-20170809220609636-293635641.png

sklearn给出了iForest与其他异常检测算法的比较。

3. 参考资料

[1] Liu, Fei Tony, Kai Ming Ting, and Zhi-Hua Zhou. "Isolation forest." Data Mining, 2008. ICDM'08. Eighth IEEE International Conference on. IEEE, 2008.

转载于:https://www.cnblogs.com/en-heng/p/7327946.html

相关文章:

asp.net 2.0中的弹出对话框

在asp.net 1.1中,要做1个弹出的对话框的话,一般是在服务端的代码中这样写: btnClick.Attributes.Add("onclick", "return confirm(Are you sure?);"); 现在在ASP.NET 2.0中,只要使用客户端的代码就可以拉&a…

2014学习目标

学习目标 给自己定一个学习计划,省着没有目的瞎弄。 整理javascript基础,记录博客(进行中......)学习jquery源码,培养自己的实战技巧学习nodejs,充实自己,记录博客学习git的使用,记录…

2021全球最具影响力 AI 学者榜单: 中国占比11.1%,位列第二

2021 年 4 月 8 日,2021 年人工智能全球最具影响力学者——AI 2000 榜单重磅揭晓。AI 2000 榜单由清华大学 AMiner 联合北京智源人工智能研究院、清华 - 中国工程院知识智能联合研究中心共同发布,旨在通过 AMiner 学术数据在全球范围内遴选过去十年人工智…

BootStrap 模态框禁用空白处点击关闭

转自(http://www.cnblogs.com/DayDreamEveryWhere/p/4550320.html) 模态框为信息编辑窗口,涉及好多内容,填了半天,若一不小心点了空白处..... $(#myModal).modal({backdrop: static, keyboard: false}); backdrop:static时,空白处不关闭. keyboard:false…

asp.net 2.0中设定默认焦点按钮

在asp.net 1.1中,当要在page_load页面中,设置某个控件为默认的焦点按钮(也就是默认焦点是在这个控件上的),可能要用到javascript的代码,而在ASP.NET 2.0中,不用这些麻烦了,在form代码…

(送)Java 架构技术揭秘:Redis+Nginx+Dubbo精选+面试题+精选视频

最近花了很长的时间去搜罗整理Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。今天就把这些东西分享给小伙伴们,也能为小伙伴们省去不少麻烦,想学什么技能了,遇到哪方面的问题了 直接打开文档学一学…

Twitter的应急预案、部署流程

2019独角兽企业重金招聘Python工程师标准>>> 《空中之城》事件 在构建Twitter的架构和系统时,我们是以周为单位来确定那些系统的性能的,我们能清楚地知道每个服务维度的系统理论容量,从而尝试去了解整个系统的理论容量。基于这些信…

新产品发布与A轮2000万美元 双喜临门后GrowingIO还要做什么

ZD至顶网CIO与应用频道 06月29日 北京消息(文/王聪彬):一个用户一天可能会打开超过12个App,但其中只有3个App的使用时间超过80%。这反映了大多数人使用手机的现状。 透过现象看本质,中国互联网、移动互联网市场既有人口…

gridview列 数字、货币和日期 显示格式

形式语法结果注释数字{0:N2}12.36 数字{0:N0}13 货币{0:c2}$12.36 货币{0:c4}$12.3656 货币"¥{0:N2}"¥12.36 科学计数法{0:E3}1.23E001 百分数{0:P}12.25%P and p present the same.日期{0:D}2006年11月25日 日期{0:d}2006-11-25 日期{0:f}200…

打造专属BGM,​Python 深度学习教你

作者 | 李秋键头图 | 下载于视觉中国出品 | AI科技大本营(ID:rgznai100)音乐文字,组合食用,效果更佳。引言:“那些听不到音乐的人,以为跳舞的人疯了。” 尼采这句话好有趣,也告诉我们音乐对于日…

XML 特殊字符处理和 CDATA

在处理XML数据时,特殊字符要特殊处理,不能和节点字符混淆。 所有 XML 文档中的文本均会被解析器解析。 只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。 PCDATA PCDATA 指的是被解析的字符数据(Parsed Charac…

zookeeper集群环境搭建

2019独角兽企业重金招聘Python工程师标准>>> 至少3台zookeeper:第一台:con/zoo.cfgtickTime2000 initLimit10 syncLimit5 dataDirC:\\Users\\Administrator\\Desktop\\Zookeepers\\zookeeper-3.4.6.1\\data dataLogDirC:\\Users\\Administrator\\Desktop\\Zookeeper…

ASP.NET遍历配置文件的连接字符串

在ASP.NET 2.0中,提供了更方便的配置文件访问的类,具体可以到 System.Configuration 名称空间下进行查看。本文提供一种在开发过程中常用的得到数据库字符串的方法,为方便使用,写成一个方法进行调用: public string Ge…

#define WIN32_LEAN_AND_MEAN 的作用

[转]#define WIN32_LEAN_AND_MEAN 的作用 今天看了用mysql的库vc连接数据库,结果我用mfc application向导建立一个工程,然后添加#include "mysql.h"(已经设置好了环境),编译出现了一大堆错误,如下 Compiling...StdAfx.cppc:mysqlincludemysql_com.h(116) : error C21…

​《头号玩家》中的“绿洲”,用 VR 可以找到

图源:百度百科出品 | AI科技大本营(ID:rgznai100)2045年,现实世界令人失望,人们将救赎的希望寄托于“绿洲”,一个虚拟游戏宇宙。人们只要戴上VR设备,就可以进入这个与现实形成强烈反差的虚拟世界…

Android开发之程序猿必需要懂得Android的重要设计理念2(5.20更新版)

上篇文章介绍了Android开发的设计理念的一部分,并没有得到博友们的多大认可,仅仅看到了一位博友在以下留言期待下一篇文章的发表,为了这小小的唯一支持。我决定继续把后面的8个要点介绍一下,自己也潜心反省一下,自己的…

Espresso小试

Espresso开源了,那就试着用一下, 1. 下载Espresso Espresso没有提供单独的jar包下载,建议clone整个项目或者下载zip包 git clone https://code.google.com/p/android-test-kit/ 或从这里下载:https://code.google.com/p/android-t…

XML与DataSet的相互转换类

送给大家一个XML与DataSet的相互转换的类:XmlDatasetConvert 该类提供了四种方法:1、将xml对象内容字符串转换为DataSet2、将xml文件转换为DataSet3、将DataSet转换为xml对象字符串4、将DataSet转换为xml文件 XmlDatasetConvert.csusing System;using System.Colle…

想学Python?那这套教程再适合不过了!

如果你想问最近这些年什么编程语言最值得学习,我相信很多人都会告诉你是Python!所以不仅是开发小白,甚至很多开发老手,也都开始学习Python,作为辅助第二语言来提高自己的职场竞争力。不过结合我最近这些年Python的学习…

修改360浏览器 标题栏 显示的文字

作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555qq.com E-mail: 313134555 qq.com 修改360浏览器 标题栏 显示的文字 dll修改 DLL(Dynamic Link Library)文件是一种常见的应用程序拓展,也叫动态链接库文件。若遇到一些已经…

联邦学习的隐忧:来自梯度的深度泄露

作者 | Ligeng Zhu and Song Han编译 | 对外经济贸易大学金融科技实验室头图 | 下载于视觉中国【编者按】数据交易流通是数据要素市场建立的关键环节。为了在推动数据流动的同时保护数据安全、个人信息和隐私,隐私计算技术因运而生。目前,该技术分为三个…

.net 中 using的几种用法

1. using指令。using 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到。例如:using System; 一般…

少走弯路的10条忠告

如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累的10条有益的涉世忠告。好好地遵循、把握这些忠告和建议吧,比起所学的课堂课程来,它毫不逊色! 1. 买个闹钟,以…

linux实战考试题:批量创建用户和密码(不能使用循环)

批量创建10个用户,并且设置随机8位密码,要求不能用shell的循环(例如:for,while等),只能用linux命令及管道实现。方法1:[rootoldboy /]# echo stu{01..10}|tr " " "\n"|sed …

路径,文件,目录,I/O常见操作汇总

摘要: 文件操作是程序中非常基础和重要的内容,而路径、文件、目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也…

Winform开发的界面处理优化

在Winform开发中,客户体验是个很好的参考性指标,如果一个功能使用的时候感觉很流畅,说明我们的程序执行效率还不错,但是随着数据的真多,原先可能流程的地方可能会变得比较卡,这时候就需要追本索源&#xff…

人工智能语音技术支持“多情感程度”调节,细腻演绎“人声”

近期,微软发布最新语音技术,支持“情感程度”轻松调节,令智能语音的情感表现力更加细腻可控。 人类的情感很大程度上体现于语音语调的微妙变化,比如一句“再见”,有时是平静而含蓄的,有时是开心而轻松的&a…

HDU 1431 素数回文

有人问我这个问题。个人感觉暴搜会TLE O(n*sqrt(n))。n100000000;(推断素数用2~sqrt(n)1 去除) 还是枚举好了。枚举 1~10000,把他每一位存下来,回文数已知 left 。求 right ,然后组合起来。比如 1 &#xf…

递归的妙用—遍历子控件

我们在ASP.NET编程中, 经常需要遍历一个Web控件的子控件 ,找到所需的控件并获取控件中相应的值。以前我都是采用循环的方式遍历子控件,但当子控件是复杂的树形结构,比如:子控件也有子控件,子控件的子控件也有子控件。这…

【原创】关于代码质量的打油诗

要想代码写得好,以下规则供参考:代码格式规范多,静态检查常做到。代码注释要工整,垃圾注释不可要。重要分支详注释,复杂逻辑拆分细。数据类型多注意,经常判空习惯好。常量类型须定义,魔幻数字要…