0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于二叉树的ensemble异常检测算法

lviY_AI_shequ 来源:lq 2018-12-11 16:57 次阅读

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

1. 前言

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

划分(partition)指样本空间一分为二,相当于决策树中节点分裂;

isolation指将某个样本点与其他样本点区分开。

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

xi 样本点的isolation需要大概12次划分,而异常点x0指需要4次左右。因此,我们可以根据划分次数来区分是否为异常点。但是,如何建模呢?我们容易想到:划分对应于决策树中节点分裂,那么划分次数即为从决策树的根节点到叶子节点所经历的边数,称之为路径长度(path length)。假设样本集合共有n个样本点,对于二叉查找树(Binary Search Tree, BST),则查找失败的平均路径长度为

其中,H(i)为harmonic number,可估计为ln(i)+0.5772156649。那么,可建模anomaly score:

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

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

2. 详解

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

停止分裂条件:

树达到了最大高度;

落在孩子节点的样本数只有一个,或者所有样本点的值均相同;

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 检测算法
    +关注

    关注

    0

    文章

    119

    浏览量

    25266
  • 二叉树
    +关注

    关注

    0

    文章

    74

    浏览量

    12396

原文标题:异常检测算法:Isolation Forest

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    二叉树算法在单总线技术中的应用

    介绍了单总线技术和二叉树算法。单总线技术可以将地址线、数据线和控制线合成一根线,并允许在这根线上挂接多个单总线器件。提出了用二叉树算法搜索单总线器件注册码,并
    发表于 03-16 09:38 20次下载

    基于二叉树分解的自适应防碰撞算法

    该文提出了一种基于二叉树分解的自适应防碰撞算法。新算法利用标签EPC 的唯一性,通过时隙分配估计标签的分布情况,对发生碰撞的时隙进行二叉树搜索,从而将一个庞大且复杂
    发表于 11-17 14:09 21次下载

    基于二叉树的时序电路测试序列设计

    为了实现时序电路状态验证和故障检测,需要事先设计一个输入测试序列。基于二叉树节点和树枝的特性,建立时序电路状态二叉树,按照电路二叉树节点(状态)与树枝(输入)的层次逻辑
    发表于 07-12 13:57 0次下载
    基于<b class='flag-5'>二叉树</b>的时序电路测试序列设计

    二叉树层次遍历算法的验证

    实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。
    发表于 11-28 01:05 2131次阅读
    <b class='flag-5'>二叉树</b>层次遍历<b class='flag-5'>算法</b>的验证

    二叉树,一种基础的数据结构类型

    然后我们再定义一棵深度也为 3 的二叉树,该二叉树的 n 个结点(n≤7),当从 1 到 n 的每个结点都与上图中的编号结点一一对应时,这二叉树就称为完全二叉树
    的头像 发表于 04-13 10:48 4427次阅读
    <b class='flag-5'>二叉树</b>,一种基础的数据结构类型

    详解电源二叉树到底是什么

    作为数据结构的基础,分很多种,像 AVL 、红黑二叉搜索....今天我想分享的是关于二叉树
    的头像 发表于 06-06 15:05 1w次阅读
    详解电源<b class='flag-5'>二叉树</b>到底是什么

    二叉树操作的相关知识和代码详解

    是数据结构中的重中之重,尤其以各类二叉树为学习的难点。在面试环节中,二叉树也是必考的模块。本文主要讲二叉树操作的相关知识,梳理面试常考的内容。请大家跟随小编一起来复习吧。 本篇针对面
    的头像 发表于 12-12 11:04 2102次阅读
    <b class='flag-5'>二叉树</b>操作的相关知识和代码详解

    二叉树的前序遍历非递归实现

    我们之前说了二叉树基础及二叉的几种遍历方式及练习题,今天我们来看一下二叉树的前序遍历非递归实现。 前序遍历的顺序是, 对于中的某节点,先遍历该节点,然后再遍历其左子树,最后遍历其右子
    的头像 发表于 05-28 13:59 2010次阅读

    数据结构与算法分析中的二叉树与堆有关知识汇总

    该资料包括数据结构与算法分析中的二叉树与堆有关的一些知识
    发表于 11-03 09:37 0次下载

    C语言数据结构:什么是二叉树

    完全二叉树:完全二叉树是效率很高的数据结构。对于深度为K,有n个节点的二叉树,当且仅当每一个节点都与深度为K的满二叉树中编号从1至n的节点一一对应时,称为完全
    的头像 发表于 04-21 16:20 2753次阅读

    怎么就能构造成二叉树呢?

    一直跟着公众号学算法的录友 应该知道,我在二叉树:构造二叉树登场!,已经讲过,只有 中序与后序 和 中序和前序 可以确定一颗唯一的二叉树。前序和后序是不能确定唯一的
    的头像 发表于 07-14 11:20 1672次阅读

    使用C语言代码实现平衡二叉树

    这篇博客主要总结平衡二叉树,所以,二叉排序树知识不会提及,但是会用到。
    的头像 发表于 09-21 11:00 1165次阅读

    二叉树的代码实现

    二叉树的主要操作有遍历,例如有先序遍历、中序遍历、后序遍历。在遍历之前,就是创建一棵二叉树,当然,还需要有删除二叉树算法
    的头像 发表于 01-18 10:41 1292次阅读
    <b class='flag-5'>二叉树</b>的代码实现

    C++构建并复制二叉树

    使用C++构建一个二叉树并复制、输出。
    的头像 发表于 01-10 15:17 1096次阅读
    C++构建并复制<b class='flag-5'>二叉树</b>

    C++自定义二叉树并输出二叉树图形

    使用C++构建一个二叉树并输出。
    的头像 发表于 01-10 16:29 1823次阅读
    C++自定义<b class='flag-5'>二叉树</b>并输出<b class='flag-5'>二叉树</b>图形