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

孤立随机森林(Isolation Forest)(Python实现)

目录

1 简介

2 孤立随机森林算法

2.1 算法概述

2.2 原理介绍

2.3 算法步骤

3 参数讲解

4 Python代码实现 

5 结果 


1 简介

孤立森林(isolation Forest)是一种高效的异常检测算法,它和随机森林类似,但每次选择划分属性和划分点(值)时都是随机的,而不是根据信息增益或基尼指数来选择。

2 孤立随机森林算法

2.1 算法概述

Isolation,意为孤立/隔离,是名词,其动词为isolate,forest是森林,合起来就是“孤立森林”了,也有叫“独异森林”,好像并没有统一的中文叫法。可能大家都习惯用其英文的名字isolation forest,简称iForest 。

  iForest算法是由南京大学的周志华和澳大利亚莫纳什大学的Fei Tony Liu,Kai Ming Ting等人共同移除,用于挖掘数据,它是适用于连续数据(Continuous numerical data)的异常检测,将异常定义为“容易被孤立的离群点(more likely to be separated)”——可以理解为分布稀疏且离密度高的群体较远的点。用统计学来解释,在数据空间里面,分布稀疏的区域表示数据发生在此区域的概率很低,因此可以认为落在这些区域里的数据是异常的。通常用于网络安全中的攻击检测和流量异常等分析,金融机构则用于挖掘出欺诈行为。对于找出的异常数据,然后要么直接清除异常数据,如数据清理中的去噪数据,要么深入分析异常数据,比如分析攻击,欺诈的行为特征。

2.2 原理介绍

iForest 属于Non-parametric和unsupervised的方法,即不用定义数学模型也不需要有标记的训练。对于如何查找哪些点是否容易被孤立(isolated),iForest使用了一套非常高效的策略。假设我们用一个随机超平面来切割(split)数据空间(data  space),切一次可以生成两个子空间(详细拿刀切蛋糕一分为二)。之后我们再继续用一个随机超平面来切割每个子空间,循环下去,直到每个子空间里面只有一个数据点为止。直观上来讲,我们可以发现那些密度很高的簇是被切分很多次才会停止切割,但是那些密度很低的点很容易很早就停到一个子空间看了。

  iForest 算法得益于随机森林的思想,与随机森林由大量决策树组成一样,iForest森林也由大量的二叉树组成,iForest 中的树叫 isolation tree,简称 iTree,iTree 树和决策树不太一样,其构建过程也比决策树简单,是一个完全随机的过程。

  假设数据集有 N 条数据,构建一颗 ITree时,从 N条数据中均匀抽样(一般是无放回抽样)出 n 个样本出来,作为这棵树的训练样本。在样本中,随机选出一个特征,并在这个特征的所有值范围内(最小值和最大值之间)随机选一个值,对样本进行二叉划分,将样本中小于该值的划分到节点的左边,大于等于该值的划分到节点的右边。由此得到一个分裂条件和左右两边的数据集,然后分别在左右两边的数据集上重复上面的过程,直到数据集只有一条记录或者达到了树的限定高度。

  由于异常数据较小且特征值和正常数据差别很大。因此,构建 iTree的时候,异常数据离根更近,而正常数据离根更远。一颗ITree的结果往往不可信,iForest算法通过多次抽样,构建多颗二叉树。最后整合所有树的结果,并取平均深度作为最终的输出深度,由此计算数据点的异常分支。

2.3 算法步骤

怎么来切这个数据空间是iForest的设计核心思想,本文仅学习最基本的方法,由于切割是随机的,所以需要用ensemble的方法来得到一个收敛值(蒙特卡洛方法),即反复从头开始切,然后平均每次切的结果。IForest由 t个iTree(Isolation Tree)孤立树组成,每个iTree是一个二叉树结构,所以下面我们先说一下iTree树的构建,然后再看iForest树的构建。

3 参数讲解

(1)n_estimators:构建多少个itree,int,optional (default=100)指定该森林中生成的随机树数量

(2)max_samples:采样数,自动是256,int,optional(default='auto)

    用来训练随机数的样本数量,即子采样的大小:

1)如果设置的是一个int常数,那么就会从总样本 X 拉取 max_samples个样本生成一棵树  iTree

2)如果设置的是一个float浮点数,那么就会从总样本 X 拉取 max_samples*X.shape[0] 个样本,X.shape[0] 表示总样本个数

3) 如果设置的是 “auto”,则max_samples=min(256, n_samples),n_samples即总样本的数量

 如果max_samples 值比提供的总样本的数量还大的话,所有的样本都会用来构造数,意思就是没有采样了,构造的 n_estimators棵ITree使用的样本都是一样的,即所有的样本。

(3)contamination:c(n)默认是0.1,float in (0, 0.5),optional(default=0.1),取值范围为(0, 0.5),表示异常数据占给定的数据集的比例,就是数据集中污染的数量,定义该参数值的作用是在决策函数中定义阈值。如果设置为“auto”,则决策函数的阈值就和论文一样,在版本0.20中有变换:默认值从0.1变为0.22的auto。

(4)max_features:最大特征数,默认为1,int or float,optional,指定从总样本X中抽取来训练每棵树iTree 的属性的数量,默认只使用一个属性

    如果设置为 int 整数,则抽取 max_features 个属性

    如果是float浮点数,则抽取 max_features *X.shape[1] 个属性

(5)bootstrap:boolean,optional(default = False),构建Tree时,下次是否替换采样,为True为替换,则各个树可放回地对训练数据进行采样;为False为不替换,即执行不放回的采样

(6)n_jobs:int or None, optional (default = None), 在运行 fit() 和 predict() 函数时并行运行的作业数量。除了在 joblib.parallel_backend 上下文的情况下,None表示为1,设置为 -1 则表示使用所有可以使用的处理器 

(7)behaviour:str,default='old',决策函数 decision_function 的行为,可以是“old”和‘new’。设置为 behavior='new'将会让 decision_function 去迎合其它异常检测算法的API,这在未来将会设置为默认值。正如在 offset_ 属性文档中详细解释的那样,decision_function 变得依赖于 contamination 参数,以 0 作为其检测异常值的自然阈值。

     New in version 0.20:behaviour参数添加到了0.20版本中以实现后向兼容

          behaviour='old'在0.20版本中以经弃用,在0.22版本中将不能使用

               behaviour参数将在0.22版本中弃用,将在0.24版本中移除

(8)random_state:int,RandomState instance or None,optional(default=None)

    如果设置为 int 常数,则该 random_state 参数值是用于随机数生成器的种子

    如果设置为RandomState实例,则该 random_state 就是一个随机数生成器

    如果设置为None,则该随机数生成器就是使用在 np.random中RandomState实例

(9)verbose:int,optional(default=0)控制树构建过程的冗长性

(10)warm_start:bool,optional(default=False),当设置为TRUE时,重用上一次调用的结果去 fit,添加更多的树到上一次的森林1集合中;否则就 fit一整个新的森林

4 Python代码实现 

# _*_coding:utf-8_*_#~~~~~~~~导入相关库~~~~~~~~~~~·
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
import matplotlib; matplotlib.use('TkAgg')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
from sklearn.ensemble import IsolationForest  #孤立随机森林rng = np.random.RandomState(42)  #该方法为np中的伪随机数生成方法,其中的42表示种子,只要种子一致 产生的伪随机数序列即为一致。#~~~~~~~产生训练数据~~~~~~~~~~
X = 0.3 * rng.randn(100, 2)  #randn:标准正态分布;rand的随机样本位于[0, 1)中
X_train = np.r_[X + 2, X - 2]
X = 0.3 * rng.randn(20, 2)
X_test = np.r_[X + 2, X - 2]
X_outliers = rng.uniform(low=-4, high=4, size=(20, 2))#~~~~~~~~~训练模型~~~~~~~~~~~~·
clf = IsolationForest( max_samples=100,random_state=rng, contamination='auto')
clf.fit(X_train)
y_pred_train = clf.predict(X_train)
y_pred_test = clf.predict(X_outliers)xx, yy = np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)#~~~~~~~~~~~~~~~~可视化~~~~~~~~~~~~~~~~~~·
plt.title("孤立随机森林")
plt.contourf(xx, yy, Z, camp=plt.cm.Blues_r)
b1 = plt.scatter(X_train[:, 0], X_train[:, 1], c='green',s=20, edgecolor='k')
b2 = plt.scatter(X_test[:, 0], X_test[:, 1], c='white',s=20, edgecolor='k')
c = plt.scatter(X_outliers[:, 0], X_outliers[:, 1], c='red',s=20, edgecolor='k')
plt.axis('tight')
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.legend([b1, b2, c],["training observations","new regular observations", "new abnormal observations"],loc="upper left")
plt.show()

5 结果 

相关文章:

孤立随机森林(Isolation Forest)(Python实现)

目录 1 简介 2 孤立随机森林算法 2.1 算法概述 2.2 原理介绍 2.3 算法步骤 3 参数讲解 4 Python代码实现 5 结果 1 简介 孤立森林(isolation Forest)是一种高效的异常检测算法,它和随机森林类似,但每次选择划分属性和划…...

小程序如何自定义分享内容

小程序项目中遇到门票转增功能&#xff0c;用户可将自己购买的门票分享给好友&#xff0c;好友成功领取即得门票一张 1.自定义分享按钮 通过button里的open-type属性里的share参数即自可定义分享按钮 <button open-type"share">分享</button>2.配置分…...

SpringBoot整合WebSocket详解

环境&#xff1a;Springboot3.0.5 WebSocket介绍 WebSocket协议RFC 6455提供了一种标准化的方式&#xff0c;通过一个TCP连接在客户端和服务器之间建立全双工、双向的通信通道。它是一个不同于HTTP的TCP协议&#xff0c;但设计为在HTTP之上工作&#xff0c;使用80和443端口&am…...

伪原创神码ai怎么样【php源码】

这篇文章主要介绍了python汉化补丁包下载&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 火车头采集ai伪原创插件截图&#xff1a; ** Spyder汉化&#xff08;python汉化&…...

Air001基于Keil环境开发,使用airisp串口命令行烧录

Air001基于Keil环境开发&#xff0c;使用airisp串口命令行烧录 有人会有这样的疑惑&#xff0c;使用Keil平台开发&#xff0c;为什么不直接使用CMSIS-DAP直接烧录&#xff0c;还要使用串口方式来去单独烧录&#xff0c;不是我不想&#xff0c;目前使用合宙官方的Air103芯片版本…...

kubernetes 中的事件(event)简介以及如何收集event和基于event告警

引用另外一篇文章对k8s event的介绍 1.什么是kubernetes事件 Kubernetes Events 是一种 Kubernetes 资源对象&#xff0c;记录了某个组件在某个时间做了某个动作&#xff0c;用于展示集群内发生的情况&#xff0c;当 Kubernetes 集群中资源状态发生变化时&#xff0c;可以产生…...

C++小游戏贪吃蛇源码

graphics.h是针对DOS下的一个C语言图形库 (c也可以) 目前支持下载此头文件的常用的有两种: 1. EGE (Easy Graphics Engine)2. EasyX Graphics LibraryEGE, 全名Easy Graphics Engine, 是windows下的简易绘图库&#xff0c;是一个类似BGI(graphics.h)的面向C/C语言新手的图形库…...

【密码学】穴居人密码

穴居人密码 文字记载中&#xff0c;有时会把来自古希腊文化之前的各种记录作为密码学的例子&#xff0c;但称它们为密码学一定太不严格了&#xff0c;这是因为那些方法都太原始了。密码学的起源能追溯到多早&#xff0c;取决于你把密码学的相关定义确定得有多宽泛。大多数作者都…...

neo4j的CQL命令实例演示

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

vue3+ts使用antv/x6

使用 2.x 版本 x6.antv 新官网: 安装 npm install antv/x6 //"antv/x6": "^2.1.6",项目结构 1、初始化画布 index.vue <template><div id"container"></div> </template><script setup langts> import { onM…...

wsl1 ubuntu通过宿主机代理连接外网

文章目录 环境变量配置apt换源apt安装&#xff0c;测试是否能通外网可能出现的问题&#xff1a;Temporary failure resolving 参考 背景&#xff1a;公司电脑是局域网&#xff0c;通过走代理来连接外网 wsl1 ubuntu想要通过来连接宿主机的局域网代理&#xff0c;访问外网 可以…...

ubuntu20.04 opencv4.2 安装笔记

参考&#xff1a; https://docs.opencv.org/4.x/d7/d9f/tutorial_linux_install.html Build with opencv_contrib # 1. Install minimal prerequisites&#xff0c; libgtk2.0-dev pkg-config 用来显示图像 sudo apt update && sudo apt install -y cmake g wget un…...

ubuntu安装nginx以及php的部署

目录 1.安装依赖包 2.安装nginx 3.编译nginx 4.启动nginx 5.访问nginx 6.增加源地址 7.安装php 8.配置php-fpm 9.修改权限 10.配置nginx里的php 11.启动php-fpm 12.配置php文件以及权限 13.登陆查看 1.安装依赖包 apt-get install gcc apt-get install libpcre3 l…...

IntelliJ IDEA 2021/2022关闭双击shift全局搜索

我这里演示的是修改&#xff0c;删除是右键的时候选择Remove就好了 IDEA左上角 File-->Settings 找到Navigate -->Search Everywhere &#xff0c;右键添加快捷键。 OK --> Apply应用...

HTML 元素中的name 属性

name 属性是 HTML 元素中常用的属性之一。它用于指定表单元素的名称&#xff0c;以便在提交表单时将其值与对应的键关联起来。 每个表单元素&#xff08;例如 <input>、<select> 和 <textarea>&#xff09;都可以具有一个 name 属性&#xff0c;该属性为元素…...

快速上手React:从概述到组件与事件处理

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

K8S系列文章之 离线安装自动化工具Ansible

参考 文档 离线安装 Ansible - DevOps - dbaselife 一、Ansible简介 Ansible是一款开源的IT配置管理工具&#xff0c;常被IT界的小伙伴们用于自动化的场景&#xff0c;多用在服务部署、配置管理方面。配置文件采用最常见的yaml格式&#xff0c;学习起来也是比较容易&#xff…...

mysql8.0.3集群搭建

下载mysql安装包&#xff1a; https://dev.mysql.com/downloads/mysql/5.7.html#downloads 准备环境 1、准备三台服务器并设置hosts 192.168.236.143 mysql1 192.168.236.144 mysql2 192.168.236.145 mysql32、设置免密登陆 #生成秘钥 ssh-keygen -t rsa #一直按Enter即可…...

vue中router路由的原理?两种路由模式如何实现?(vue2) -(上)

平时我们编写路由时&#xff0c;通常直接下载插件使用&#xff0c;在main.js文件中引入直接通过引入vue-router中的Router通过Vue.use使用以后定义一个routeMap数组&#xff0c;里边是我们编写路由的地方&#xff0c;最后通过实例化一个 Router实例 将routes我们定义的routeMao…...

消息队列(3) -封装数据库的操作

前言 上一篇博客我们写了, 关于交换机, 队列,绑定, 写入数据库的一些建库建表的操作 这一篇博客中,我们将建库建表操作,封装一下实现层一个类来供上层服务的调用 , 并在写完该类之后, 测试代码是否完整 实现封装 在写完上述的接口类 与 xml 后, 我们想要 创建一个类 ,来调用…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...