【机器学习 | 异常检测】孤立森林(isolation Forest)iForest 算法理论讲解及 Python 实战

这篇具有很好参考价值的文章主要介绍了【机器学习 | 异常检测】孤立森林(isolation Forest)iForest 算法理论讲解及 Python 实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、原理

孤立森林(Isolation Forest,简称 iForest)是一种无监督学习算法,用于识别异常值。

其基本原理可以概括为一句话:异常数据由于数量较少且与正常数据差异较大,因此在被隔离时需要较少的步骤。

有两个假设:

  • 异常的值是非常少的(如果异常值很多,可能被识别为正常的)
  • 异常值与其他值的差异较大(这点也可以引出主要是全局上都为异常的异常,局部小异常可能发现不了,因为差异并不大)

二、具体流程

2.1 训练森林

  1. 子采样: 首先从整个数据集中随机抽取一定数量的样本来为构建树做准备。这些抽样的子集大小通常远小于原始数据集的大小,这样可以限制树的大小,并且减少计算复杂度。
  2. 构建孤立树 (iTrees): 对于每个子采样集,算法构建一棵孤立树。构建孤立树的过程是递归的。在每个节点,算法随机选择一个特征,并在该特征的最大值和最小值之间随机选择一个分割值。然后,数据根据这个分割值将样本分到左子树或右子树(这里其实就是简单的将样本中特征小于这个分割点的样本分到左边,其次分到右边)。这个过程的结束条件:树达到限定的高度, 节点中的样本数量到一定的数目,或者所有样本的所选特征值都是同一个值。
  3. 森林构建: 重复1-2构建完特定数量的孤立树,集合为孤立森林。

2.2 首先要明确几个相关概念

  1. 路径长度( h ( x ) h(x) h(x)): 指样本通过该孤立树构建阶段的特征选择方式,从树的根节点到达该样本被孤立的节点(被孤立就是意味着这个样本最终到达的树的叶子节点)所需要的边数。
  2. 平均路径长度 E ( h ( x ) ) E(h(x)) E(h(x)): 该样本在森林中所有树的路径长度的平均值。
  3. 树的平均路径长度:
    c ( n ) = 2 H ( n − 1 ) − 2 ( n − 1 ) n c(n)=2H(n-1)-\frac{2(n-1)}{n} c(n)=2H(n1)n2(n1)
    H ( i ) H(i) H(i) 是调和数,可以近似为 l n ( i ) + 0.5772156649 ln(i) + 0.5772156649 ln(i)+0.5772156649,其中 n n n 为样本个数,对于给定的数据集大小 n n n,平均路径长度的期望是一个常数,该公式提供了一个标准化的基准,用于将路径长度标准化。
  4. 异常分数:对于每个样本 x x x,其异常分数 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))
    其中, E ( h ( x ) ) E(h(x)) E(h(x)) 是数据点 x x x 在所有树中路径长度的平均值, n n n 是训练数据的样本量, c ( n ) c(n) c(n) 是树的平均路径长度,用于标准化。

2.3 异常分数

score的范围为[0, 1]。

  1. E ( h ( x ) ) E(h(x)) E(h(x)) 约等于 c ( n ) c(n) c(n), 样本点的路径长度和平均路径长度没啥差别,看不出是否有异常;
  2. E ( h ( x ) ) E(h(x)) E(h(x)) 越靠近 0, score 越接近1, 说明样本很容易被孤立,更可能是异常的;
  3. E ( h ( x ) ) E(h(x)) E(h(x)) 的极端情况就是为样本的 n − 1 n - 1 n1, 这时候 score 很小,不容易被孤立,也看不出是否为异常。

2.4 检测过程

  1. 路径长度计算: 对于新的测试样本计算它们在每棵孤立树中的路径长度, 并算平均路径长度。
  2. 计算异常分数: 利用上述计算,孤立森林会计算每个数据点的异常分数。
  3. 判定异常: 根据计算出的异常分数,可以设置一个阈值来判定哪些数据点是异常的。

三、优缺点

3.1 优点

  1. 高效性: 孤立森林算法特别适合处理大数据集。它具有线性的时间复杂度,并且由于使用了子采样,使得在计算上更加高效。
  2. 易于并行化: 和随机森林一样,构建孤立树是独立的过程,构建森林可以并行化。

3.2 缺点

  1. 异常值比例敏感性: 如果数据集中异常值的比例相对较高,孤立森林的效果可能就会下降,因为它是基于异常值“少而不同”的假设。
  2. 对局部异常检测不敏感:因为 少而不同的 前提条件决定主要解决全局异常的特点,对在局部区域表现出轻微异常特征的点检测不是很敏感。
  3. 不适用于多维特征情况:iforest不会因为特征的多少而降低算法的效率,但也正因为每次只随机用其中一个特征作为分割的特征,如果特征维度很高,就会有很多特征没有用到。

四、代码实战

4.1 准备数据

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split

n_samples, n_outliers = 120, 10
rng = np.random.RandomState(0)
cluster_1 = 0.4 * rng.randn(n_samples, 2) + np.array([2, 2])
cluster_2 = 0.3 * rng.randn(n_samples, 2) + np.array([-2, -2])
outliers = rng.uniform(low=-4, high=4, size=(n_outliers, 2))

X = np.concatenate([cluster_1, cluster_2, outliers])
y = np.concatenate(
    [np.ones((2 * n_samples), dtype=int), -np.ones(n_outliers, dtype=int)]
)

scatter = plt.scatter(X[:, 0], X[:, 1], c=y, s=20, edgecolor="k")
handles, labels = scatter.legend_elements()
plt.axis("square")
plt.legend(handles=handles, labels=["outliers", "inliers"], title="true class")
plt.title("data distribution")
plt.show()

孤立森林异常检测,Python3常用到的函数总结,机器学习系列文章,机器学习,算法,python,iForest

4.2 模型

# 通过y的比例进行均匀拆分
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)

from sklearn.ensemble import IsolationForest

clf = IsolationForest(max_samples=100, random_state=0)
clf.fit(X_train)

# 得到score,Negative scores represent outliers, positive scores represent inliers
y_pre_score_test = clf.decision_function(cluster_1)
print(y_pre_score_test)

# -1为异常, 1为正常, 可以看下这个函数内部,就是score<0的设为-1
y_pre_label_test = clf.predict(cluster_1) 
print(y_pre_label_test)

孤立森林异常检测,Python3常用到的函数总结,机器学习系列文章,机器学习,算法,python,iForest

4.3 可视化边缘

# 通过网格的方式得到location的x和y坐标
xx, yy = np.meshgrid(np.linspace(-6, 6, 60), np.linspace(-6, 6, 60))
# concat x和y 得到输入的坐标
input_location = np.c_[xx.ravel(), yy.ravel()]

Z = clf.decision_function(input_location)
Z = Z.reshape(xx.shape)

plt.title("IsolationForest")
plt.contourf(xx, yy, Z, camp=plt.cm.Blues_r)
b1 = plt.scatter(X_train[:, 0], X_train[:, 1], c='white', s=20, edgecolor='k')
b2 = plt.scatter(X_test[:, 0], X_test[:, 1], c='green', s=20, edgecolor='k')
c = plt.scatter(outliers[:, 0], outliers[:, 1], c='red', s=20, edgecolor='k')
plt.axis('tight')
plt.xlim((-6, 6))
plt.ylim((-6, 6))
plt.legend([b1, b2, c],
           ["train data",
            "test data",
            "outlier"],
           loc="best")
plt.show()

孤立森林异常检测,Python3常用到的函数总结,机器学习系列文章,机器学习,算法,python,iForest文章来源地址https://www.toymoban.com/news/detail-855819.html

到了这里,关于【机器学习 | 异常检测】孤立森林(isolation Forest)iForest 算法理论讲解及 Python 实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【机器学习:异常值检测】新颖性和异常值检测

    许多应用程序需要能够确定新观测值是属于与现有观测值相同的分布(它是异常值),还是应被视为不同的分布值(它是异常值)。通常,此功能用于清理真实数据集。必须做出两个重要的区别: outlier detection: 异常值检测: 训练数据包含异常值,这些异常值被定义为与其他

    2024年01月23日
    浏览(35)
  • 机器学习——异常检测

    异常点检测(Outlier detection),⼜称为离群点检测,是找出与预期对象的⾏为差异较⼤的对象的⼀个检测过程。这些被检测出的对象被称为异常点或者离群点。异常点(outlier)是⼀个数据对象,它明显不同于其他的数据对象。异常点检测的应用也十分广泛,例如:信用卡反欺诈

    2024年02月15日
    浏览(39)
  • 机器学习:异常检测

    anomaly,outlier, novelty, exceptions 不同的方法使用不同的名词定义这类问题。 假如只有正常的数据,而异常的数据的范围非常广的话(无法穷举),二分类这些不好做。另外就是异常资料不太好收集。 每张图片都有标注,就可以来训练一个辛普森家族的成员分类器。 基于cl

    2024年02月15日
    浏览(36)
  • 机器学习-决策树-异常检测-主成分分析

    一种对实例进行分类的树形结构,通过多层判断区分目标所属类别 本质:通过多层判断,从训练数据集中归纳出一组分类规则 优点: 计算量小,运算速度快 易于理解,可清晰查看个属性的重要性 缺点: 忽略属性间的相关性 样本类别分布不均匀时,容易影响模型表现 决策

    2024年01月21日
    浏览(37)
  • 基于机器学习的异常检测与分析技术

    传统的运维方式在监控、问题发现、告警以及故障处理等各个环节均存在明显不足,需要大量依赖人的经验,在数据采集、异常诊断分析、故障处理的效率等方面有待提高。 本关键技术面对传统运维故障处理效率低、问题定位不准确、人力成本高三大痛点,将人工智能与运维

    2024年02月16日
    浏览(35)
  • 随机森林(Random Forest)简单介绍

    随机森林是一种监督式学习算法,适用于分类和回归问题。它可以用于数据挖掘,计算机视觉,自然语言处理等领域。随机森林是在决策树的基础上构建的。随机森林的一个重要特点是它可以减少决策树由于过度拟合数据而导致的过拟合,从而提高模型的性能。 随机森林是一

    2024年02月07日
    浏览(43)
  • 随机森林算法(Random Forest)原理分析及Python实现

    随机森林是bagging集成策略中最实用的算法之一。森林是分别建立了多个决策树,把它们放到一起就是森林,这些决策树都是为了解决同一任务建立的,最终的目标也都是一致的,最后将其结果来平均即可,如图所示。 从给定的训练数据集中学习出一个函数(模型参数),当

    2024年02月02日
    浏览(58)
  • 李宏毅机器学习作业8-异常检测(Anomaly Detection), autoencoder, 残差网络

    目录 目标和数据集 数据集 方法论 导包 Dataset module autoencoder 训练 加载数据 训练函数 训练 推断 解答与讨论 fcn 浅层模型 深层网络 cnn 残差网络 辅助网络 使用Unsupervised模型做异常检测:识别给定图像是否和训练图像相似 Training data 100000 human faces data/traingset.npy: 100000 images in a

    2024年02月07日
    浏览(42)
  • 3dmax森林树木植物插件 Forest Pack Pro 6.3.1

    Itoo Forest Pack Pro,中文名为专业森林制作(散布工具) 6.3.1 3dmax:2014/2015/2016/2017/2018/2019/2020/2021 V-Ray:1.5 (SP3- SP6),V-Ray 2 SP1,V-Ray 2.2,2.3,2.4,3,3.1,3.2,3.3,3.4,3.5,3.6,4.1,4.2,4.3,5.0,5.1,5.2+ Forest Pack是世界上最受欢迎的3dmax专业森林制作(散布工具)插件。它提供了

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包