正在加载中...

展开本页目录
算法教程IsolationForest-孤立森林

IsolationForest-孤立森林

No.163 · 在线教程

IsolationForest-孤立森林 的真实核心主要位于:

IsolationForest-孤立森林

1. 方法概述

IsolationForest-孤立森林 的真实核心主要位于:

  • core/calculator.py

从当前源码看,这个模块直接基于 sklearn 的 IsolationForest,但外围额外实现了:

  1. ID 列 / 标签列 / 特征列识别;
  2. 缺失值处理与缩放;
  3. decision_function / score_samples / 自定义 anomaly_score 三套输出;
  4. PCA 二维嵌入;
  5. 图表、Excel 与复现脚本导出。

2. 数据预处理

2.1 输入结构

设处理后的特征矩阵为

$$ X=(x_{ij})_{n\times d} \tag{1} $$

标签列若存在,仅用于评估,不参与建模。

2.2 缺失值处理

代码支持:

  • drop_rows
  • fill_mean
  • fill_median
  • fill_zero

2.3 缩放

支持:

  • none
  • standard
  • min_max

标准化形式为

$$ z_{ij}=\frac{x_{ij}-\mu_j}{\sigma_j} \tag{2} $$

3. Isolation Forest 理论与代码输出

3.1 理论异常度

孤立森林的经典理论分数可写为

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

其中 \(\mathbb{E}[h(x)]\) 是样本在随机孤立树中的平均路径长度,\(c(n)\) 是样本规模归一化常数。

3.2 当前代码实际使用的判别量

尽管理论基础来自路径长度,但项目在结果层面直接保留 sklearn 的:

  • score_samples
  • decision_function
  • predicted_label

并定义

$$ \mathrm{anomaly\_score}_i=-\,\mathrm{decision\_function}_i \tag{4} $$

因此当前模块的判别规则是

$$ \hat y_i= \begin{cases} -1,& \mathrm{decision\_function}_i<0\\ 1,& \mathrm{otherwise} \end{cases} \tag{5} $$

也就是说,代码实际阈值是 decision_function = 0

3.3 offset_

源码同时记录

$$ \mathrm{score\_samples\ threshold}=\mathrm{offset\_} \tag{6} $$

这是 score_samples 那一侧与 decision_function=0 对应的阈值。

4. 评估指标

若提供真实标签列,代码会将其转换为“1=异常,0=正常”,然后计算:

$$ \mathrm{Accuracy}=\frac{TP+TN}{TP+TN+FP+FN} \tag{7} $$

$$ \mathrm{Precision}=\frac{TP}{TP+FP} \tag{8} $$

$$ \mathrm{Recall}=\frac{TP}{TP+FN} \tag{9} $$

$$ \mathrm{F1}=\frac{2PR}{P+R} \tag{10} $$

并在条件满足时追加:

  • roc_auc
  • pr_auc

这些排序指标都是基于 anomaly_score 计算的。

5. 输出结果与论文应用

5.1 Excel 工作表

当前模块会导出:

  • 参数
  • 原始数据
  • 处理后特征
  • 得分与标签
  • Top异常
  • 混淆矩阵
  • ROC曲线数据
  • PR曲线数据
  • 图表清单
  • 预处理信息

5.2 复现脚本

模块还会自动生成:

  • repro_isolation_forest.py

并将原始输入另存到 repro_inputs,方便把整个结果目录整体迁移或复现实验。

5.3 论文写作表述建议

可以写成:

  • 采用 Isolation Forest 对样本进行无监督异常检测;
  • decision_function<0 作为异常判定规则,并将 -decision_function 作为异常强度分数;
  • 在有标签情形下,使用 Accuracy、Precision、Recall、F1、ROC-AUC 和 PR-AUC 评价检测性能。

6. 实现说明与注意事项

6.1 结果解释应以 decision_function 为主

虽然孤立森林底层来源于路径长度,但当前软件实际展示和阈值判定直接围绕 decision_function 展开,因此论文写法最好也与导出结果保持一致。

6.2 首列可能被自动识别为 ID

若用户未显式指定 ID 列,而首列又是“非数值且唯一”,代码会自动把它当成样本 ID。

6.3 top_n 不影响训练,只影响展示

Top异常 工作表只展示分数最高的若干样本,不改变模型本身的预测标签。

7. 论文写作模板

7.1 方法描述模板

“本文采用 Isolation Forest 异常检测方法,通过随机选择特征与分裂阈值构建多棵孤立树,并利用样本在随机划分过程中的隔离难易程度刻画异常性。依据项目当前实现,软件同步输出 score_samplesdecision_functionanomaly_score=-decision_function,其中异常判定规则采用 decision_function<0。因此,论文写作时宜以 decision_function 及其派生异常分数为中心解释模型结果,而不必回到平均路径长度的底层数值口径。”

7.2 结果解释模板

结果部分可写为:异常分数越大,说明样本越容易在随机分裂过程中被较短路径孤立,因此越可能属于异常点。若得分分布图中右尾样本与 PCA 散点图外围样本高度重合,可认为模型识别出的异常具有较好的空间一致性。对于带标签场景,建议优先报告 ROC-AUC 与 PR-AUC,以体现异常排序能力;同时可结合 Precision、Recall 与 F1 评价阈值判别效果。

7.3 表格标题模板

  1. 表 1 Isolation Forest 参数与预处理设置表
  2. 表 2 样本异常分数与排序结果表
  3. 表 3 Top 异常样本判别结果表
  4. 表 4 带标签场景下 Isolation Forest 检测性能指标表

7.4 图表题注模板

  1. 图 1 Isolation Forest 异常分数分布图。
  2. 图 2 Isolation Forest 异常样本 PCA 二维散点图。
  3. 图 3 Isolation Forest 带标签检测效果对比图。

7.5 表格示例

表 1 Isolation Forest 异常排序结果表示例

样本编号 anomaly_score decision_function 预测标签 排名
\(i_1\)
\(i_2\)

表注:异常判定规则采用 decision_function<0anomaly_score 为便于论文展示而引入的正向异常强度分数。

8. 单篇终审补充

8.1 图题与表题对齐建议

  • 参数 表可写为:表X Isolation Forest 参数设置表。
  • 原始数据 表可写为:表X Isolation Forest 原始数据表。
  • 处理后特征 表可写为:表X Isolation Forest 处理后特征表。
  • 得分与标签 表可写为:表X Isolation Forest 异常得分与预测标签结果表。
  • Top异常 表可写为:表X Isolation Forest Top 异常样本排序表。
  • 混淆矩阵 表可写为:表X Isolation Forest 混淆矩阵表。
  • ROC曲线数据 表可写为:表X Isolation Forest ROC 曲线数据表。
  • PR曲线数据 表可写为:表X Isolation Forest PR 曲线数据表。
  • 图表清单 表可写为:表X Isolation Forest 图表索引与路径清单。
  • 预处理信息 表可写为:表X Isolation Forest 预处理信息表。
  • anomaly_score_hist.png 建议写为:图X Isolation Forest 异常分数分布图。
  • decision_function_hist.png 建议写为:图X Isolation Forest 决策函数分布图。
  • pca_embedding.png 建议写为:图X Isolation Forest PCA 二维嵌入图。
  • roc_curve.png 建议写为:图X Isolation Forest ROC 曲线图。
  • pr_curve.png 建议写为:图X Isolation Forest PR 曲线图。

8.2 终审说明

  • 当前代表性结果目录中的真实主工作簿为 isolation_forest_baseline.xlsx,复现输出为 isolation_forest_repro.xlsx。论文若列实验输出文件,应把基线导出与 repro 导出区分开。
  • 当前真实工作表全部采用中文命名,如 得分与标签Top异常预处理信息 等,因此终稿表题不能沿用英文模板名。
  • 当前实体图文件位于 charts/ 子目录下,真实图名包括 anomaly_score_hist.pngdecision_function_hist.pngpca_embedding.pngroc_curve.pngpr_curve.png。若论文只展示一部分图,建议优先保留得分分布图与 ROC/PR 曲线图。
  • 真实 repro 脚本为 repro_isolation_forest.py,并通过 INPUT_FILE = 'repro_inputs/isolation_forest_input.csv' 读取输入副本。附录复现实验说明应保持这一相对路径口径。
  • 当前结果解释应围绕 decision_function<0anomaly_score=-decision_function 两套并行口径展开,不应把路径长度公式重新写成工作簿直接输出值。

8.3 全量强化补充

本篇终审补充绑定的真实算法目录为 具体的算法3/异常检测/IsolationForest-孤立森林,本次采用的代表性结果目录为 具体的算法3/异常检测/IsolationForest-孤立森林/results/__enhanced_isolation_forest_baseline_20260310

当前目录中真实存在两份工作簿:

  • isolation_forest_baseline.xlsx
  • isolation_forest_repro.xlsx

两者实测工作表一致,均包含:

  • 参数
  • 原始数据
  • 处理后特征
  • 得分与标签
  • Top异常
  • 混淆矩阵
  • ROC曲线数据
  • PR曲线数据
  • 图表清单
  • 预处理信息

因此这一轮应把 isolation_forest_baseline.xlsx 视为主结果,把 isolation_forest_repro.xlsx 视为复现输出。中文 sheet 体系已经完整覆盖异常得分、阈值评价与预处理信息,正文不需要再套用英文模板名。

当前目录中的真实图文件位于 charts/ 子目录:

  • charts/anomaly_score_hist.png
  • charts/decision_function_hist.png
  • charts/pca_embedding.png
  • charts/roc_curve.png
  • charts/pr_curve.png

这说明该轮真实图证据同时覆盖异常分数分布、决策函数分布、PCA 嵌入与 ROC/PR 曲线。论文如果只保留核心图,建议优先选择 anomaly_score_hist.pngpca_embedding.png 与 ROC/PR 曲线。

复现实物方面,该目录实际包含:

  • 具体的算法3/异常检测/IsolationForest-孤立森林/results/__enhanced_isolation_forest_baseline_20260310/repro_isolation_forest.py
  • 具体的算法3/异常检测/IsolationForest-孤立森林/results/__enhanced_isolation_forest_baseline_20260310/repro_inputs/isolation_forest_input.csv

脚本中明确写成 INPUT_FILE = 'repro_inputs/isolation_forest_input.csv'OUTPUT_FILE = 'isolation_forest_repro.xlsx'。因此这一篇当前的代表性结果目录已经是目录内相对输入副本复现口径。

9. 软件实现核查补充(2026-07)

  • 当前主结果目录应写作 具体的算法3/异常检测/IsolationForest-孤立森林/results/__enhanced_isolation_forest_baseline_20260310
  • 正文应围绕 异常分数阈值评价ROC曲线数据PR曲线数据图表清单预处理信息 来写。
  • 图证应对应 anomaly_score_hist.pngdecision_function_hist.pngpca_embedding.pngroc_curve.pngpr_curve.png
  • 复现脚本应按 repro_isolation_forest.py + repro_inputs/isolation_forest_input.csv 的口径说明。