Isolation Forest

IsolationForest是一种用于异常检测的高效算法。它通过构建多棵二叉树(iTree)来隔离异常点,异常点通常需要较少的分割即可被隔离。本文详细介绍了IsolationForest的原理,包括训练过程和预测方法,以及如何计算数据点的异常分值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Isolation Forest?

Isolation Forest的思路很简单。假设我们的数据集合是一维空间下的点

我们通过切分的方式可以很方便的将异常点B点切分出来。

如何定义方便?

切分的次数

那这个思路对于正常点点A来说也可以取,可以看到如果要把A隔离出来我要切很多遍。

 

Isolation Forest算法

1.训练:抽取多个样本,构建多棵二叉树(isolation tree,即iTree);

2.预测:综合多棵二叉树的结果,计算每个数据点的异常分值

 

训练

构建一棵iTree时,先从全量数据中抽取一批样本,然后随机选择一个特征作为起始节点,并为该特征的最大值和最小值之间随机选择一个值,将样本中小于该取值的数据划到左分支,大于等于该取值的划到右分支。然后,在左右两个分支数据中,重复上述步骤,直道满足如下条件:

1.数据不可再分,即:只包含一条数据,或者全部数据相同。

2.二叉树达到限定的最大深度

 

预测

计算数据x的异常分值时,先要估算它在每棵iTree中的路径长度(也可以叫深度)。具体的,先沿着一棵iTree,从根节点开始按不同特征的取值从上往下,直到达到某叶子节点。假设iTree的训练样本中同样落在x所在叶子节点的样本数为T.size,则数据x在这棵iTree上的路径长度h(x),可以用下面这个公式计算:

公式中,e表示数据x从iTree的根节点到叶结点过程中经过的边的数目,C(T.size)可以认为是一个修正值,它表示在一棵用T.size条样本数据构建的二叉树的平均路径长度。一般的,C(n)的计算公式如下:

 

其中,H(n-1)可用ln(n-1)+0.5772156649估算,这里的常数是欧拉常数。数据x最终的异常分值Score(x)综合了多棵iTree的结果:

 

从异常分值的公式看,如果数据x在多棵iTree中的平均路径长度越短,得分越接近1表明数据x越异常;如果数据x在多棵iTree中的平均路径长度越长,得分越接近0,表示数据x越正常;如果数据x在多棵iTree中的平均路径长度接近整体均值,则打分会在0.5附近

 

总结

其实这个很好理解,就看score函数2的指数部分,是一个分数形式,分子是数据x的在树中的平均长度,分母是树的平均长度。所以假设这个点是异常点,则整体的分数值应该是小于1的,而且是趋近于0。然后呢前面这个负号很有说法。等于说,越异常的点,带负号分数值就越大越趋近于0。所以1为数据x越异常。

 

参考

机器学习-异常检测算法(1):https://zhuanlan.zhihu.com/p/27777266

<think>嗯,用户让我介绍一下Isolation Forest模型,我需要用中文详细解释清楚。首先,我得回想一下这个模型的基本概念和原理。Isolation Forest,也就是孤立森林,是一种用于异常检测的无监督学习算法。它属于集成学习方法,基于决策树构建。 那它的核心思想是什么呢?应该是通过快速隔离异常点来识别异常。因为异常点的数量较少且特征值与正常点差异大,所以更容易被隔离。例如,在数据空间中,异常点可能分布在稀疏区域,所以需要较少的分割次数就能被隔离到单独的区域。 接下来需要讲它的工作原理。首先,应该提到构建iTree的过程,也就是随机选择特征和分割值来递归分割数据,直到所有数据点都被隔离或者达到树的高度限制。然后,整个模型是由多个iTree组成的孤立森林。异常检测的步骤包括:随机选择子样本构建多棵树,计算每个样本在所有树中的路径长度,最后根据平均路径长度得出异常分数。 然后需要解释路径长度和异常分数的关系。路径长度越短,说明样本越容易被隔离,异常的可能性越高。异常分数的计算公式可能需要给出,比如s(x, ψ) = 2^{-E(h(x))/c(ψ)},其中c(ψ)是标准化项。分数接近1表示异常,接近0则是正常点。 接下来是算法的优势。比如高效处理高维数据和大规模数据集,线性时间复杂度和低内存需求。还有对正常样本的假设少,不需要假设数据分布,鲁棒性强。适用场景包括金融欺诈检测、网络安全、工业故障检测等。 可能还需要对比其他方法,比如基于聚类或统计的方法,突出孤立森林在处理高维和大数据上的优势。然后提到参数设置,比如树的数量、子样本大小、树的高度限制等,但通常默认值已经不错,调整空间不大。 最后总结一下Isolation Forest的特点和应用场景,确保用户能理解其适用性和局限性。注意要用中文,避免使用Markdown格式,行内公式用$...$,独立公式用$$...$$。还要保持结构清晰,分步骤解释,确保正确性和易懂性。</think>好的,我来分步骤介绍一下 Isolation Forest(孤立森林)模型: 1. **模型定位** Isolation Forest 是一种**无监督异常检测算法**,属于集成学习方法,核心思想是通过"快速隔离异常点"来识别异常数据。 - 核心假设:异常数据具有"少而不同"的特点(数量少、特征值与正常数据差异大) - 类比举例:就像在森林中,奇形怪状的树更容易被快速定位到具体位置 2. **工作原理** (1)**构建iTree(孤立树)** - 随机选择一个特征 - 随机选择该特征的一个分割值 - 递归分割数据直到: - 所有数据点被隔离(每个点独占一个子空间) - 达到树高限制(通常设为$log_2ψ$,ψ是子样本量) (2)**组成森林** 通过构建多棵iTree(通常100-200棵)形成孤立森林,增加结果的稳定性。 (3)**异常检测** - 计算样本在所有树中的平均路径长度 - 路径越短 → 越容易被隔离 → 异常概率越高 - 异常分数公式: $$ s(x,ψ) = 2^{-\frac{E(h(x))}{c(ψ)}} $$ 其中$c(ψ)$是标准化项,$E(h(x))$是平均路径长度 3. **算法优势** - **高效处理高维数据**:仅依赖路径长度,不依赖距离度量 - **线性时间复杂度**:$O(nψ)$,适合大规模数据(ψ是子样本量) - **低内存需求**:无需存储全部树结构,仅需记录路径长度 - **鲁棒性强**:对正常数据分布不做假设,不易受噪声干扰 4. **典型应用场景** - 金融欺诈检测(异常交易识别) - 网络安全(入侵检测) - 工业质检(故障设备识别) - 医疗健康(异常生理指标监测) 5. **参数调优建议** - `n_estimators`:树的数量(通常100-200) - `max_samples`:子样本量(默认256) - `contamination`:预期异常比例(影响决策阈值) - `max_features`:随机选择特征数(默认全选) 例如在Python中调用示例: ```python from sklearn.ensemble import IsolationForest model = IsolationForest(n_estimators=100, contamination=0.01) model.fit(X) anomalies = model.predict(X) # 返回-1表示异常 ``` 这种算法特别适合处理**高维度、大样本量**的异常检测任务,但需要注意:当异常集群较大或特征差异不明显时,检测效果可能下降。实际应用中常与其他检测方法(如LOF、One-Class SVM)组合使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值