热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

异常检测基于孤立森林算法IsolationbasedAnomalyDetection2实现

参考https:scikit-learn.orgstablemodulesgeneratedsklearn.ensemble.IsolationForest.html#sklear

参考https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest.fit

 

class sklearn.ensemble.IsolationForest(n_estimators=100, max_samples=’auto’, cOntamination=’legacy’, max_features=1.0, bootstrap=False, n_jobs=None, behaviour=’old’, random_state=None, verbose=0, warm_start=False)

孤立森林算法

使用孤立森林算法对每个样本返回异常分数

孤立森林通过随机选取一个特征来“隔离”观察,然后随机选取该选取特征在数据集中最大、最小值之间的某个值做分割值

当递归分区能够被一个树结构表示时,需要用来隔离一个样本的分割值数量等价于从树的根节点寻找到该样本的终端节点经过的路径长度

这个路径长度,是在这样的随机树的森林中平均得到的,是一个衡量标准和我们的决策函数

随机分区为异常生成明显更短的路径。因此当一个随机树森林为某个样本共同生成一个更短的路径长度时,就说明该样本很可能是异常点

New in version 0.18.

 

参数:


1)n_estimators : int, optional (default=100) 指定该森林中生成的随机树数量
2)max_samples : int or float, optional (default=”auto”)
用来训练随机数的样本数量,即子采样的大小


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



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



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


  如果max_samples值比提供的总样本数量还大的话,所有的样本都会用来构造数,意思就是没有采样了,构造的n_estimators棵iTree使用的样本都是一样的,即所有的样本
3)contamination : float in (0., 0.5), optional (default=0.1)
取值范围为(0., 0.5),表示异常数据占给定的数据集的比例
数据集中污染的数量,其实就是训练数据中异常数据的数量,比如数据集异常数据的比例。定义该参数值的作用是在决策函数中定义阈值。如果设置为'auto',则决策函数的阈值就和论文中定义的一样

在版本0.20中有变化:默认值从0.1变为0.22版本中的'auto'


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


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



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


5)bootstrap : boolean, optional (default=False)

如果为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'。设置为behaviour='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一整个新的森林
属性:
1)estimators_ : list of DecisionTreeClassifier
构造好的子树的集合
2estimators_samples_ : list of arrays
每个子树抽取的样本的子集
3)max_samples_ : integer
样本的真正数量
4)offset_ : float
offset用来从原始分数开始定义决策函数,其关系是decision_function = score_samples - offset_。假设behaviour == ‘new’,则offset_如下定义:


  • 当contamination参数设置为'auto',当inliers的得分接近0且outliers的得分接近-1时,偏移量等于-0.5;



  • 当提供与“auto”不同的contamination参数时,则以在训练中获取期望的异常个数的方式来定义偏移量(决策函数<0的样本)。



  • 假设behaviour ==“old”,我们总是有offset_ = -0.5,使得决策函数独立于contamination参数。


注意:其实现是基于一系列的ExtraTreeRegressor。每个树的最大深度设置为ceil(log_2(n)),其中n是用于构建树的样本数量
方法:
































decision_function(self, X) 基本分类器对样本X的计算得到的平均异常分数
fit(self, X[, y, sample_weight]) 训练函数
fit_predict(self, X[, y]) 对X进行训练,并返回X的标签,即异常或正常;等价于先运行fit()再运行predit()
get_params(self[, deep]) 得到该森林的参数
predict(self, X) 预测一个采样是否为异常
score_samples(self, X)与原文中定义的异常值相反。
set_params(self, \*\*params) 设置该森林的参数

 

 

 

 

 

 

初始化:

__init__(self, n_estimators=100, max_samples=’auto’, cOntamination=’legacy’, max_features=1.0, bootstrap=False, n_jobs=None, behaviour=’old’, random_state=None, verbose=0, warm_start=False)

 

1.decision_function(selfX)
基本分类器对样本X的计算得到的平均异常分数

输入样本的异常值计算即计算森林中树的平均异常值。

对于一棵给定的树,观测结果的正常性的度量是包含在该观测结果的叶子的深度,这等于分离这一点所需的分裂次数。当叶片中有几个观察值为n_left时,将添加一个n_left样例隔离树的平均路径长度。

参数:


1)X : array-like or sparse matrix, shape (n_samples, n_features)
输入样本。将在内部转换为类型dtype=np.float32,如果一个稀疏矩阵被提供给一个稀疏的csr_matrix
返回:
1)scores : array, shape (n_samples,)

输入样本的异常分数。越低越可能是异常,负数表示为异常,整数表示为正常

 

estimators_samples_

构造好的子树的抽取的样本的集合

返回一个动态生成的索引列表,该列表标识用于构造森林中每棵树的样本。

注意:在每次调用该属性时都会重新创建该列表,以便通过不存储采样数据来减少对象内存占用。因此,获取属性的速度可能比预期的要慢。

 


2.fit(selfXy=Nonesample_weight=None)
训练函数,构建森林
参数:
1)X : array-like or sparse matrix, shape (n_samples, n_features)
输入样本。为得到最大效率使用dtype=np.float32。也支持稀疏矩阵,为得到最大效率使用csc_matrix
2)sample_weight : array-like, shape = [n_samples] or None
样本权重。如果为None,则每个样本的权重相等
3)y : Ignored
不使用,表示API的一致性
返回:
self : object
3.fit_predict(selfXy=None)
对样本X训练并返回样本的标签结果,即是异常或正常
返回-1表示异常,1表示正常
参数:
1)X : ndarray, shape (n_samples, n_features)
输入数据
2)y : Ignored
不使用,表示API的一致性
4.get_params(selfdeep=True)
得到该森林的参数
参数:
deep : boolean, optional
如果为True,则将返回此森林estimator的参数以及包含的作为森林estimator的子对象。
返回:
params : mapping of string to any
返回映射于其值的参数名
5.predict(selfX)
预测某个样本是否是异常
参数:
X : array-like or sparse matrix, shape (n_samples, n_features)
输入样本。将在内部转换为类型dtype=np.float32,如果一个稀疏矩阵被提供给一个稀疏的csr_matrix
返回:
is_inlier : array, shape (n_samples,)
对于每个观测值,根据拟合好的模型,判断是否为一个异常点,返回值为+1或-1。
6.score_samples(selfX)
与原文中定义的异常值相反
输入样本的异常值计算为森林中树木的平均异常值。
对于一棵给定的树,观测结果的正常性的度量是包含在该观测结果的叶子的深度,这等于分离这一点所需的分裂次数。当叶片中有几个观察值为n_left时,将添加一个n_left样例隔离树的平均路径长度。
参数:
X : array-like or sparse matrix, shape (n_samples, n_features)
输入样本
返回:
输入样本的异常分数。越低越可能是异常
7.set_params(self**params)
设置该森林(estimator)的参数


推荐阅读
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • #define_CRT_SECURE_NO_WARNINGS#includelist.h#includevoidSListInit(PNode*pHead ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
author-avatar
寒落落
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有