sklearn.ensemble.IsolationForest(孤立森林,异常检测)

IsolationForestsklearn.ensemble 提供的 异常检测(Outlier Detection) 方法,它通过 构建多棵随机树,将异常点隔离,适用于 异常检测、欺诈检测、入侵检测等任务


1. IsolationForest 作用

  • 用于异常检测(如 信用卡欺诈检测、网络入侵检测)。
  • 基于决策树,将异常数据隔离开,计算其异常分数(anomaly score)。
  • 比基于距离的异常检测方法(如 KNN)更适用于高维数据

2. IsolationForest 代码示例

(1) 训练 IsolationForest 进行异常检测

from sklearn.ensemble import IsolationForest
import numpy as np

# 生成数据
rng = np.random.RandomState(42)
X = 0.3 * rng.randn(100, 2)  # 100 个正常点
X = np.concatenate([X, rng.uniform(low=-4, high=4, size=(10, 2))])  # 10 个异常点

# 训练孤立森林模型
model = IsolationForest(n_estimators=100, contamination=0.1, random_state=42)
model.fit(X)

# 预测:1 表示正常点,-1 表示异常点
y_pred = model.predict(X)

# 统计异常点数量
n_outliers = np.sum(y_pred == -1)
print("检测到的异常点数量:", n_outliers)

解释

  • contamination=0.1:假设 10% 的数据是异常点(超参数)。
  • predict(X) 返回 1(正常点)或 -1(异常点)

3. IsolationForest 主要参数

IsolationForest(n_estimators=100, contamination="auto", max_samples="auto", max_features=1.0, bootstrap=False, random_state=None)
参数 说明
n_estimators 森林中的决策树数量(默认 100,值越大效果越稳)
contamination 异常样本比例(默认 "auto",可设 0.1 表示 10% 的数据是异常点)
max_samples 每棵树的样本数(默认 "auto",即 min(256, n_samples)
max_features 每棵树的特征比例(默认 1.0,使用所有特征)
bootstrap 是否使用自助采样(默认 False
random_state 设置随机种子,保证结果可复现

4. 获取异常分数

anomaly_scores = model.decision_function(X)
print("前 10 个样本的异常分数:", anomaly_scores[:10])

解释

  • decision_function(X) 返回 异常分数(anomaly score,值越小越可能是异常点。

5. 可视化异常点

import matplotlib.pyplot as plt

# 可视化正常点和异常点
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap="coolwarm", edgecolors="k")
plt.title("IsolationForest 异常检测")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

解释

  • 蓝色表示正常点,红色表示异常点

6. IsolationForest vs. 其他异常检测方法

方法 适用情况 主要区别
IsolationForest 基于树结构,适用于高维数据 无需计算距离,适用于大规模数据
LocalOutlierFactor (LOF) 基于密度,适用于低维数据 计算邻域密度,适合小规模数据
One-Class SVM 基于支持向量机,适用于复杂分布数据 计算成本较高

示例

from sklearn.neighbors import LocalOutlierFactor

lof = LocalOutlierFactor(n_neighbors=20, contamination=0.1)
y_pred_lof = lof.fit_predict(X)  # -1 表示异常点
print("LOF 检测到的异常点数量:", np.sum(y_pred_lof == -1))

解释

  • IsolationForest 适用于大规模高维数据LOF 适用于小规模密度异常检测。

7. contamination 对异常检测的影响

contaminations = [0.05, 0.1, 0.2]
for c in contaminations:
    model = IsolationForest(n_estimators=100, contamination=c, random_state=42)
    model.fit(X)
    y_pred = model.predict(X)
    print(f"污染率={c}, 检测到的异常点数={np.sum(y_pred == -1)}")

解释

  • contamination=0.05:认为 5% 的数据是异常点。
  • contamination=0.2:认为 20% 的数据是异常点。

8. 适用场景

  • 异常检测(如 欺诈检测、网络攻击检测)。
  • 高维数据异常检测,避免计算距离过于复杂
  • 当数据异常点较少时,IsolationForest 可能比传统方法更有效

9. 结论

  • IsolationForest 适用于异常检测任务,利用决策树隔离异常点,适用于高维数据和大规模数据,比基于距离的方法 计算效率更高
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐