You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scikit-learn Isolation Forest:如何提取样本路径长度?

获取IsolationForest中样本的路径长度

sklearn的IsolationForest没有直接提供获取样本路径长度的API,但可以通过访问模型内部的树结构来计算。路径长度是样本从根节点到叶子节点经过的边数,每棵树的路径长度取平均就是最终用于计算异常分数的基础值。

实现步骤:

  • 训练IsolationForest模型后,遍历模型中存储在estimators_属性里的每棵树。
  • 对每个样本,通过树的decision_path方法获取路径节点矩阵,统计路径中的节点数量,边数等于节点数减1。
  • 将所有树的路径长度取平均,得到每个样本的平均路径长度。

代码示例:

from sklearn.ensemble import IsolationForest
import numpy as np

# 生成示例数据并训练模型
X = np.random.randn(100, 5)
clf = IsolationForest(n_estimators=10, random_state=42)
clf.fit(X)

def get_path_lengths(model, X):
    path_lengths = []
    for tree in model.estimators_:
        # 获取每个样本的路径节点稀疏矩阵
        node_path = tree.decision_path(X)
        # 计算单棵树中每个样本的路径长度(节点数-1)
        tree_path_len = node_path.sum(axis=1).A1 - 1
        path_lengths.append(tree_path_len)
    # 取所有树的路径长度平均值
    avg_path_length = np.mean(path_lengths, axis=0)
    return avg_path_length

# 获取每个样本的平均路径长度
avg_path = get_path_lengths(clf, X)
print(avg_path[:5])  # 打印前5个样本的路径长度

说明:

  • estimators_属性存储了IsolationForest中所有孤立树,每棵树是ExtraTreeClassifier实例。
  • decision_path(X)返回的稀疏矩阵,每行对应一个样本的路径节点,sum(axis=1)统计节点总数后减1,就是实际经过的边数(路径长度)。
  • 最终的平均路径长度是IsolationForest计算异常分数的核心指标,异常分数是对该值做归一化处理后的结果。

内容的提问来源于stack exchange,提问作者MVMV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:54:53