欢迎光临
我们一直在努力

【AI算法学习笔记】Isolation Forest(孤立森林)从原理到 Python 实战

一、什么是 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)):多棵树上的平均路径长度

异常分数通常与下面的形式相关:

s(x,n)=2^{-\\frac{E(h(x))}{c(n)}}

其中:

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 为什么有效。

赞(0)
未经允许不得转载:171主机测评 » 【AI算法学习笔记】Isolation Forest(孤立森林)从原理到 Python 实战
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址