Sklearn 机器学习 异常值检测 孤立深林
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖
本博客的精华专栏:
【自动化测试】 【测试经验】 【人工智能】 【Python】
Sklearn 机器学习 异常值检测——孤立森林(Isolation Forest)实战指南
在机器学习和数据分析中,异常值检测(Outlier Detection) 是数据预处理和异常监控的重要环节。
本文将带你从理论到实践,全面掌握 Sklearn 中的孤立森林(Isolation Forest)算法,并结合代码示例完成一个完整案例。
📌 一、孤立森林算法简介
孤立森林(Isolation Forest,简称 iForest)是一种基于树模型的异常检测算法,它的核心思想是:
- 异常值容易被孤立:在随机划分数据特征空间时,异常值通常需要较少的分割次数即可被隔离。
- 正常值不易被孤立:正常数据点通常分布在密集区域,需要更多分割次数才能隔离。
- 平均路径长度与异常分数的关系:孤立森林会构建多棵随机决策树(孤立树),并计算每个样本在所有树中的平均路径长度。路径越短,说明该点越容易被隔离,其异常分数就越高(即越可能是异常值)。
1. 工作原理
- 随机选择一个特征。
- 在该特征的最大值与最小值之间,随机选择一个分割值。
- 将数据分割成两部分并递归执行。
- 树的深度越小,说明该点越容易被孤立。
2. 优势
- 适合高维数据集
- 时间复杂度低(近似线性)
- 对数据分布没有严格假设
- 无需密度估计,也不需要平衡正负样本(异常检测中异常样本通常极少)
- 与基于密度的算法(如 DBSCAN)不同,不依赖距离或密度阈值,适用性更广
🛠 二、Sklearn 中的孤立森林实现
在 Scikit-learn 中,孤立森林由 sklearn.ensemble.IsolationForest
提供,常用参数包括:
参数名 | 说明 |
---|---|
n_estimators | 森林中树的数量,越多越稳定,但计算成本增加 |
max_samples | 每棵树训练时的样本数,可为整数或比例(0-1 之间),默认值为 "auto" ,实际取 min(256, n_samples) |
contamination | 异常值比例(如 0.05 表示 5%),用于计算异常判定阈值 |
max_features | 每棵树使用的特征数,默认 1.0 (所有特征),高维数据中可设为 0.8~0.9 以减少 |