孤立森林详解

news2024/11/26 12:28:57

基本概念

孤立森林(Isolation Forest)是一种基于异常检测的机器学习算法,用于识别数据集中的异常点。孤立森林算法在异常检测、网络入侵检测、金融欺诈检测等领域有广泛应用,并且在处理大规模数据和高维数据时表现出色。孤立森林的基本思想的前提是,将异常点定义为那些 容易被孤立的离群点

可以理解为分布稀疏,且距离高密度群体较远的点。从统计学来看,在数据空间里,若一个区域内只有分布稀疏的点,表示数据点落在此区域的概率很低,因此可以认为这些区域的点是异常的。

也就是说,孤立森林算法的理论基础有两点:

  • 异常数据占总样本量的比例很小;
  • 异常点的特征值与正常点的差异很大。

算法特点:

  1. 在训练过程中,每棵孤立树都是随机选取部分样本;
  2. 对于大规模数据集,孤立森林算法具有较高的计算效率。不同于 KMeans、DBSCAN等算法,孤立森林不需要计算有关距离、 密度的指标,可大幅度提升速度,减小系统开销;
  3. 因为基于 ensemble,所以有线性时间复杂度。通常树的数量越多,算法越稳定;
  4. 由于每棵树都是独立生成的,因此可部署在大规模分布式系统上来加速运算。
  5. 不受数据维度的影响,适用于高维数据。
  6. 不需要对数据进行归一化或标准化预处理。

在这里插入图片描述
算法的工作过程如下:

  1. 选择一个样本集中的特征,并随机选择一个特征值范围。
  2. 根据选择的特征和范围,将样本集中的数据点分割成左右两个子集。
  3. 重复步骤1和2,将每个子集继续分割,直到达到预定的停止条件,例如树的高度达到最大限制或子集中只剩下一个数据点。
  4. 构建一棵二叉树,其中每个数据点都是树节点。树的深度即为数据点的路径长度。
  5. 重复步骤1至4,构建多棵独立的随机树。
  6. 对于新的数据点,通过计算其在每棵树中的路径长度来判断其是否为异常点。如果路径长度较短,则该数据点被认为是异常点。

实例代码

import plotly.express as px 
from sklearn.datasets import load_iris 
from sklearn.ensemble import IsolationForest

data = load_iris(as_frame=True) 
X,y = data.data,data.target 
df = data.frame 

# 模型训练
iforest = IsolationForest(n_estimators=100, max_samples='auto',  
                          contamination=0.05, max_features=4,  
                          bootstrap=False, n_jobs=-1, random_state=1)

#  fit_predict 函数 训练和预测一起 可以得到模型是否异常的判断,-1为异常,1为正常
df['label'] = iforest.fit_predict(X)  # 传入的X可以是一维或多维的dataframe

# 预测 decision_function 可以得出 异常评分
df['scores'] = iforest.decision_function(X) 

结果可视化

## 重命名
df['anomaly'] = df['label'].apply(lambda x: 'outlier' if x==-1  else 'inlier')

## 绘制不同“scores”的概率密度分布
fig = px.histogram(df,x='scores',color='anomaly')
fig.show()

## 绘制3D散点图
fig = px.scatter_3d(df, x='petal width (cm)',
                        y='sepal length (cm)',
                        z='sepal width (cm)',
                        color='anomaly')
fig.show()

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

了解不一样的Sui NFT标准

Sui的设计赋予非同质化Token(NFT)在灵活性、组合性和可交易性方面独特的属性,使NFT不仅仅代表指向图像的数字记录,还可以成为图像本身。这些NFT可以被修改或与其他NFT合并,以创造出可扩展的艺术作品。同时,…

分布式事务解决方案Seata谁建议你用的?

一、名词解释: TC (Transaction Coordinator) - 事务协调者 维护全局/分支事务的状态,驱动全局事务的提交与回滚 TM (Transaction Manager) - 事务管理器 定义全局事务的范围:开启、提交、回滚全局事务 RM (Resource Manager) - 资源管理…

云原生之深入解析如何使用Prometheus扩展Kubernetes调度器

一、kubernetes 调度配置 ① Scheduler Configuration kube-scheduler 提供了配置文件的资源,作为给 kube-scheduler 的配置文件,启动时通过 --config 来指定文件。目前各个 kubernetes 版本中使用的 KubeSchedulerConfiguration 为: 1.21 …

面试专题:spring

涉及到spring的问题都离不开IOC和AOP.AOP实现原理、动态代理和静态代理、Spring IOC的初始化过程、IOC原理、自己怎么实现一个IOC容器? 这些东西都是经常会被问到的。 IOC是什么: Ioc即控制反转,把原来的代码里需要实现的对象创建&#xff…

使用conda安装配置python环境

使用conda安装配置python环境 下载 我这里下载的是2-4.7.12.1,具体可以参考如下地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda2-4.7.12.1-Linux-x86_64.s…

d3dcompiler_47.dll缺失怎么修复?那个方法修复更简单

再运行游戏或者ps等软件,计算机系统提示找不到d3dcompiler_47.dll是怎么回事?相信困扰着不少小伙伴,其实d3dcompiler_47.dll是Microsoft 的 DirectX 11核心组件之一,它主要用于编译和运行 Direct3D 11应用程序和游戏。如果文件丢失…

编译安装LAMP

一、Apache网站服务: 1. Apache的起源(多系统兼容): Apache HTTPD Server 简称 Apache,是 Apache 软件基金会的一个开源的网页服务器, 可以在大多数计算机操作系统中运行,由于其多平台和安全性…

美国国家量子计划咨询委员会发布更新国家量子计划建议

​ (图片来源:网络) 耗资12亿美元的美国国家量子计划(NQI)于2018年12月颁布,该计划为期10年,现在将开展审查前五年的活动,并对今后五年的推进计划提出建议。为此,美国国…

[经验]PMP快速通过指南

我的备考经验: 1一阶段:铺底,花费时间1.5周左右 主要是熟悉考试框架和内容,通过看网盘资料里的章节重点解析视频课后习题。 先看框架你就很清楚的了解下来,PMP考试把项目管理的过程拆解成了5大过程组(启…

压力测试-JMeter安装、入门、结果分析

目录 1.写在前面 2.常用压测工具 3.压测机环境准备:JMeter部署 3.1 JMeter下载安装&启动&配置 3.2 入门案例 3.2.3、压测结果解释 3.2.4、线程属性参数原理 1.写在前面 等到服务上线后,在业务压力的冲击下,会发现程序运行非常…

CATIA和SolidWorks孰强孰弱?对比一下就知

寻找合适的 CAD 程序可能会很棘手,因为它是一种您将投资并使用的工具,您需要确保做出正确的决定。这篇文章将用于帮助区分 CATIA 和SOLIDWORKS之间的差异,以帮助您确定两者中哪一个最适合您的业务。 谁使用 CATIA? CATIA 于 198…

Selenium教程__环境安装(1)

Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。 Selenium基本上支持主流的浏览器,包括IE,Mozilla Firefox,Safari,Google Chrome,Opera等。 …

请求与响应

设置映射路径 在不同的bean中可能会出现相同名字的路径,这样的情况会产生冲突,为了解决这个冲突我们可以设置模块名作为请求路径前缀 Controller RequestMapping("/book") public class BookController {//设置当前操作的访问路径RequestMa…

Rust语言从入门到入坑——(4)Rust语法(下)

文章目录 0 引入1、结构体1. 1 结构体1. 2 结构体方法1. 3 元组结构体 2、枚举类2.1 match2.2 Option 枚举类 3、集合3.1 向量(Vector)3.2 字符串(String)3.1 映射表(Map) 4、总结 0 引入 在这里我们需要介…

DOM4J解析web.xml文件,实例化Servlet

1、DOM4J解析web.xml文件实例化Servlet 原理分析:我们解析用户在地址栏中输入的地址信息如add.do,用这个地址去web.xml文件中通过DOM4J技术,解析判断add.do对应的是哪个url-pattern,找到后获取对应的servlet-name。在用这个servlet-name去找…

servlet规范过滤器

我们可以把servlet程序看作是一个最终要执行的目标。我们可以使用过滤器filter来添加过滤代码,这个过滤代码可以添加到servlet执行之前,也可以添加到servlet执行之后。Filter可以做到在servlet这个目标程序执行之前过滤,也可以在目标程序执行…

【深度学习】BERT变种—百度ERNIE 3.0

预训练的模型在各种自然语言处理(NLP)任务中取得了最先进的成果。扩大预训练语言模型的规模可以提高其泛化能力。然而,现有的大规模预训练模型,主要依赖纯文本学习,缺乏大规模知识指导学习,模型能力存在局限…

尚硅谷大数据Flink1.17实战教程-笔记02【部署】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据Flink1.17实战教程-笔记01【Flink概述、Flink快速上手】尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】尚硅谷…

pycharm-设置python文件模板及常用的模板内容使用

pycharm设置文件和代码(File and Code Templates)模板步骤如下: 1.pycharm工具栏"file"->"Settings"->"Editor"->"Code Style"->"File and Code Templates",点击右侧python …