一、什么是 Isolation Forest?

Isolation Forest(孤立森林,简称 IF) 是一种用于异常检测(Anomaly Detection)的无监督机器学习算法。
它最大的特点是:
不需要大量“正常/异常”标签,就可以自动发现数据中的异常样本。
传统分类算法通常需要:
训练数据
↓
正常样本 + 异常样本
↓
模型训练
↓
判断新数据
而 Isolation Forest 更像:
大量历史数据
↓
Isolation Forest
↓
分析哪些数据容易被“孤立”
↓
异常分数
↓
正常 / 异常
这使它非常适合工业设备、IoT、MES、网络监控、交易风控等场景。
二、为什么异常数据容易被发现?

先看一个简单例子。
假设我们有设备温度数据:
60
61
62
63
61
64
62
63
65
125 ← 异常
前面的数据集中在:
60 ───────────────── 65
而 125 距离其他数据非常远。
如果我们随机选择一个切分点:
125
│
60 61 62 63 61 64 62 63 65
─────────────────────┼────────────
↑
很容易切出来
125 很快就被单独分离。
而正常数据:
60 61 62 63 61 64 62 63 65
彼此非常接近,需要经过多次随机切分才能把某一个数据单独分出来。
因此:
异常点的平均路径长度通常更短。
这就是 Isolation Forest 最核心的思想。
三、Isolation Forest 的核心思想

Isolation Forest 可以理解成:
不断随机切数据,看看一个数据点需要多少次才能被单独“隔离”出来。
它主要包含两个核心概念:
1. Isolation Tree
一棵“孤立树”。
Root
│
随机选择特征
│
┌───────┴───────┐
↓ ↓
Node Node
/ \\ │
/ \\ ↓
↓ ↓ …
Data Data
每一次:
随机选择一个特征
↓
随机选择一个切分值
↓
将数据分成两部分
↓
继续递归
直到:
一个样本
↓
被单独隔离
四、为什么需要很多棵树?

一棵随机树的结果可能不稳定。
因此 Isolation Forest 会建立很多棵树:
数据集
│
┌───────────┼───────────┐
↓ ↓ ↓
Tree 1 Tree 2 Tree 3
↓ ↓ ↓
路径长度 路径长度 路径长度
↓ ↓ ↓
综合结果
↓
Anomaly Score
这就是:
Isolation + Forest
也就是:
孤立 + 森林
五、什么叫 Path Length?
假设异常数据:
125℃
经过随机切分:
第一次切分
↓
第二次切分
↓
125℃被单独分离
路径长度:
2
而正常数据:
62℃
可能需要:
第一次
↓
第二次
↓
第三次
↓
第四次
↓
第五次
↓
……
才能被隔离。
所以:
路径短
↓
容易孤立
↓
更可能异常
路径长
↓
不容易孤立
↓
更可能正常
六、Isolation Forest 的数学直觉
Isolation Forest 最终关注的是:
平均路径长度 E(h(x))
其中:
- x:某个数据样本
- h(x):样本在一棵 Isolation Tree 中的路径长度
- E(h(x)):多棵树上的平均路径长度
异常分数通常与下面的形式相关:

其中:
c(n)
是用于标准化路径长度的函数。
直观理解即可:
当路径很短
E(h(x))↓
那么:
s(x)↑
说明:
越可能是异常点。
七、Python 实战
Python 中可以直接使用 scikit-learn。
import numpy as np
from sklearn.ensemble import IsolationForest
# 模拟设备温度
data = np.array([
[60],
[61],
[62],
[63],
[61],
[64],
[62],
[63],
[65],
[125]
])
# 创建模型
model = IsolationForest(
n_estimators=100,
contamination=0.1,
random_state=42
)
# 训练
model.fit(data)
# 预测
prediction = model.predict(data)
print(prediction)
返回结果类似:
[ 1 1 1 1 1 1 1 1 1 -1]
其中:
1 = 正常
-1 = 异常
因此:
125℃
被识别成异常。
八、获取异常分数
除了 predict(),我们还可以获得异常分数。
score = model.decision_function(data)
for value, s in zip(data.flatten(), score):
print(value, s)
一般来说:
分数越低
↓
越异常
因此可以进一步做:
设备数据
↓
Isolation Forest
↓
异常 Score
↓
┌───────────────┐
│ Score 正常 │
│ Score 异常 │
└───────────────┘
九、MES 中的实际案例
这个算法在你的 MES 学习体系里非常有价值。
假设我们监控一台 CNC 设备。
每天采集:
温度
主轴转速
主轴电流
振动
压力
加工时间
形成:
| 08:00 | 62 | 3000 | 12.1 | 0.12 |
| 09:00 | 64 | 3000 | 12.3 | 0.13 |
| 10:00 | 63 | 3100 | 12.2 | 0.12 |
| 11:00 | 65 | 3050 | 12.5 | 0.14 |
| 12:00 | 64 | 3000 | 12.4 | 0.13 |
| 13:00 | 112 | 3000 | 19.8 | 0.86 |
最后一条数据明显可疑。
但是实际工业现场通常不会只有一个指标异常。
可能出现:
温度 ↑
电流 ↑
振动 ↑
加工时间 ↑
单独判断一个指标可能不准确。
这时候就可以使用:
Isolation Forest 多维异常检测。
十、多维设备异常检测

输入:
X =
[
温度,
主轴转速,
电流,
振动,
压力,
加工时间
]
然后:
CNC设备
│
┌───────────┼───────────┐
↓ ↓ ↓
温度 电流 振动
│ │ │
└───────────┼───────────┘
↓
特征数据
↓
Isolation Forest
↓
异常评分
↓
┌────────┴────────┐
↓ ↓
正常 异常
↓
告警
↓
MES系统
这比单纯:
温度 > 100℃
这种固定阈值方式更加灵活。
十一、Isolation Forest vs 固定阈值
传统方式:
if temperature > 100:
alarm()
问题是:
100℃一定异常吗?
不一定。
不同设备:
设备A:正常温度 50~70℃
设备B:正常温度 80~110℃
设备C:正常温度 40~60℃
固定阈值很难覆盖所有设备。
Isolation Forest 可以学习历史数据中的:
正常分布
然后发现:
不符合整体数据分布的样本
因此:
| 固定阈值 | 简单,但灵活性低 |
| Z-Score | 适合部分统计分布 |
| IQR | 适合简单异常检测 |
| Isolation Forest | 多维、无监督、适合复杂数据 |
| AutoEncoder | 非线性复杂异常检测 |
| One-Class SVM | 单类异常检测 |
十二、Isolation Forest 的几个重要参数
实际开发中最常见的是:
IsolationForest(
n_estimators=100,
contamination=0.05,
max_samples="auto",
random_state=42
)
n_estimators
森林中树的数量。
例如:
10
50
100
200
树越多通常越稳定,但计算量也增加。
contamination
预期异常数据比例。
例如:
contamination=0.05
表示预计大约:
5%
的数据属于异常。
这个参数在实际项目中需要谨慎设置。
max_samples
每棵树使用多少样本。
大型数据集可以通过采样减少计算量。
random_state
随机种子。
开发和测试阶段建议固定:
random_state=42
方便复现结果。
十三、真正的工业系统不能只靠 Isolation Forest
这一点非常重要。
在 MES / 工业 AI 项目中,不建议:
Isolation Forest
↓
直接停机
而应该:
传感器
↓
数据采集
↓
数据清洗
↓
特征工程
↓
Isolation Forest
↓
异常评分
↓
规则引擎
↓
告警
↓
AI分析
↓
维修人员确认
例如:
异常分数:0.91
↓
温度异常
+
电流异常
+
振动异常
↓
AI Agent
↓
“疑似主轴轴承异常”
↓
生成维修建议
这样才能从:
异常检测
进一步发展到:
异常诊断 → 原因分析 → 预测性维护。
十四、Isolation Forest 在 AI Agent 中的位置
如果进一步结合你正在做的 Agent / FDE 方向,可以形成:

这就是一个非常典型的:
传统机器学习 + 工业数据 + AI Agent + FDE
的组合。
十五、学习路线
如果你准备系统学习 Isolation Forest,我建议按这个顺序:

其中 Decision Tree → Random Forest → Isolation Forest 这一条线尤其值得理解,因为它能帮助你真正搞懂 Isolation Forest 为什么有效。




