当前位置: 首页 > java >正文

异常值检测:孤立森林模型(IsolationForest)总结

目录

  • 一、前言
  • 二、孤立森林算法
    • 2.1 算法简介
    • 2.2 基本原理
    • 2.3 算法步骤
    • 2.4 异常分数计算方式
    • 2.5 python调用方式
  • 三、python代码示例
  • 四、小结
  • 五、参考学习


在这里插入图片描述

一、前言

近期在研究构建寿命预测模型,相信很多数据人都懂建模的过程,其实有80%的时间都是在和数据处理打交道。

在数据处理过程中,一种常见的处理场景即异常值处理。日常常用的异常值处理,最常用的几种方式: 西格玛法则、四分位距、指定阈值 来识别检测异常值,其它使用过的方法主要是基于距离或者密度的方法来识别,不过这类方法小数据量还行,大数据量就很很影响检测效率。调研发现一种以前没用过的一种方法:孤立森林算法(Isolation Forest),因此作一记录学习。

二、孤立森林算法

2.1 算法简介

孤立森林(Isolation Forest)是一种用于异常检测的无监督学习算法,属于ensemble的方法,由 Fei Tony Liu、Kai Ming Ting 和 Zhi-Hua Zhou 于 2008 年提出。它通过构建多棵孤立树(Isolation Tree)来识别数据中的异常点,具有线性时间复杂度和高精准度,计算效率高、能够处理高维数据等优点,广泛应用于网络安全、金融欺诈检测、工业设备故障检测等领域。

2.2 基本原理

孤立森林算法的核心思想基于这样一个事实:异常点通常是数据集中少数且与其他数据点差异较大的点,因此它们更容易被孤立出来。该算法通过递归地随机划分数据空间,将异常点快速地隔离到树的浅层节点,而正常点则需要更多的划分才能被隔离,从而根据数据点在孤立树中的路径长度来判断其是否为异常点。

2.3 算法步骤

  • 步骤一:构建孤立树(iTree)
  • 从原始数据集中随机选择一部分样本(通常为固定数量,记为 sample_size)作为当前树的训练样本。
  • 随机选择一个特征和该特征上的一个分割值,将样本集划分为两个子集。
  • 对每个子集重复上述步骤,直到满足停止条件(例如,子集中只有一个样本或达到最大树深度)。
  • 步骤二:构建孤立森林

重复步骤一,构建多棵孤立树(通常记为 n_estimators),这些树构成了孤立森林。

  • 步骤三:计算路径长度

对于每个数据点,将其输入到孤立森林中的每棵树中,记录该数据点在每棵树中从根节点到叶节点所经过的路径长度。

  • 步骤四:计算异常分数

根据数据点在所有孤立树中的平均路径长度,计算其异常分数。异常分数的取值范围在 0 到 1 之间,分数越接近 1 表示该数据点越可能是异常点,分数越接近 0 表示该数据点越可能是正常点。

2.4 异常分数计算方式

为了量化异常程度,孤立森林定义了异常分数 s(x,n)s(x,n)s(x,n),公式如下:
s(x,n)=2−E(h(x))c(n)s(x,n)=2^{-\frac{E(h(x))}{c(n)}}s(x,n)=2c(n)E(h(x))
其中:

  • h(x):样本x在iTree上的路径长度;
  • E(h(x)):样本 x 在所有 iTree 中的平均路径长度;
  • c(n):样本量为 n 时的 “平均路径长度期望”(作为归一化因子,由理论推导得出,与 n 近似成对数关系);
  • n:构建 iTree 时的样本子集大小。

分数解读:

  • s≈1:样本极可能是异常点(路径长度远短于平均);
  • s≈0:样本极可能是正常点(路径长度接近平均);
  • s≈0.5:样本处于正常与异常的边界(路径长度接近随机划分的平均水平)。

2.5 python调用方式

python中有现在的算法库,通过下述方式即可导入使用。

from sklearn.ensemble import IsolationForest

** 函数关键参数解析:**

  • n_estimators:iTree 的数量(默认 100)。树越多,结果越稳定,但计算成本越高;
  • max_samples:每棵 iTree 处理的样本量(默认 256)。过小可能导致异常点漏检,过大则降低效率;
  • max_depth:iTree 的最大深度(默认随样本量动态调整)。限制深度可避免过拟合(尤其是样本量小时)。

三、python代码示例

# 导入必要的库 
import pandas as pd  # 数据处理库
import numpy as np  # 数值计算库
import matplotlib.pyplot as plt  # 数据可视化库
from sklearn.model_selection import train_test_split  # 数据集划分工具
from sklearn.preprocessing import StandardScaler  # 数据标准化工具
from sklearn.ensemble import IsolationForest  # 异常检测模型 
from sklearn.metrics import mean_squared_error, r2_score ,root_mean_squared_error # 模型评估指标
from itertools import groupby
from operator import itemgetter# 生成一些示例数据
np.random.seed(42)
X_inliers = 0.3 * np.random.randn(100, 2)
X_inliers = np.r_[X_inliers + 2, X_inliers - 2]
X_outliers = np.random.uniform(low=-4, high=4, size=(20, 2))
X = np.r_[X_inliers, X_outliers]# 创建并训练孤立森林模型
clf = IsolationForest(n_estimators=100, contamination=0.1)
clf.fit(X)# 预测每个数据点的异常标签
y_pred = clf.predict(X)# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='viridis')
plt.title('Isolation Forest Anomaly Detection')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

请添加图片描述

四、小结

以前,有问题,找百度;现在有个更快捷的方式,有问题找chatgpt。不得不说,各类gpt工具,确实助力工作效率得到了很大的提升,相比百度搜索查找信息更加精准。最后,底层算法虽重要,但上层的思维逻辑更重要,作为数据分析师,千锤百炼自己思考问题、定义问题、解决问题的方式方法,思维逻辑尤其重要!

五、参考学习

  • 孤立森林异常值评分公式推导
  • 【异常检测】孤立森林(Isolation Forest)算法简介
  • 孤立森林(isolation):一个最频繁使用的异常检测算法
http://www.xdnf.cn/news/18498.html

相关文章:

  • Flowise 任意文件上传漏洞 含Flowise Docker安装、漏洞复现(CVE-2025-26319)
  • 如何使用 DeepSeek 助力工作:全面指南​
  • AWS OpenSearch 是什么
  • ROS2下YOLO+Moveit+PCL机械臂自主避障抓取方案
  • 如何理解AP服务发现协议中“如果某项服务需要被配置为可通过多个不同的网络接口进行访问,则应为每个网络接口使用一个独立的客户端服务实例”?
  • Unreal Engine APawn 与 ACharacter 比较
  • 停车场道闸的常见形式
  • Docker的安装
  • 什么是数据分类分级?数据分类分级技术实现路径及产品推荐
  • 逆向代码笔记
  • centos7安装oracle19c流程(自用)
  • 全面解析 `strchr` 字符串查找函数
  • 闲置笔记本链接硬盘盒充当Windows NAS 网易UU远程助力数据读取和处理
  • vivo招AI架构专家(AI Agent方向)
  • 云原生(Cloud Native)技术概述
  • 密码管理中硬编码密码
  • react的基本使用
  • 【学习记录】structuredClone,URLSearchParams,groupBy
  • 树莓派采集、计算机推理:基于GStreamer的YOLOv5实现方案
  • 隧道代理无需手动获取IP的核心机制与技术优势
  • 纯手撸一个RAG
  • SSM从入门到实战: 2.6 MyBatis缓存机制与性能优化
  • skywalking-agent与logback-spring.xml中的traceId自动关联的原理
  • 三,设计模式-抽象工厂模式
  • 深入解析TCP/UDP协议与网络编程
  • Leetcode—120. 三角形最小路径和【中等】(腾讯校招面试题)
  • SSM框架基础知识-Spring-Spring整合MyBatis
  • 基于SpringBoot+Vue框架的高校论坛系统 博客论坛系统 论坛小程序
  • 图神经网络分享系列-LINE(三)
  • Oracle SYS用户无法登录数据库-ORA-12162