异常检测-基于孤立森林算法Isolation-based Anomaly Detection-2-实现
参考https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest.fit
class sklearn.ensemble.IsolationForest(n_estimators=, max_samples=’auto’, contamination=’legacy’, max_features=1.0, bootstrap=False, n_jobs=None, behaviour=’old’, random_state=None, verbose=, 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
- 构造好的子树的集合
2)estimators_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=, max_samples=’auto’, contamination=’legacy’, max_features=1.0, bootstrap=False, n_jobs=None, behaviour=’old’, random_state=None, verbose=, warm_start=False)
1.decision_function(self, X)基本分类器对样本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(self, X, y=None, sample_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(self, X, y=None) - 对样本X训练并返回样本的标签结果,即是异常或正常
- 返回-1表示异常,1表示正常
- 参数:
- 1)X : ndarray, shape (n_samples, n_features)
- 输入数据
- 2)y : Ignored
- 不使用,表示API的一致性
- 4.
get_params(self, deep=True) - 得到该森林的参数
- 参数:
- deep : boolean, optional
- 如果为True,则将返回此森林estimator的参数以及包含的作为森林estimator的子对象。
- 返回:
- params : mapping of string to any
- 返回映射于其值的参数名
5.predict(self, X)- 预测某个样本是否是异常
- 参数:
- 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(self, X)与原文中定义的异常值相反- 输入样本的异常值计算为森林中树木的平均异常值。
- 对于一棵给定的树,观测结果的正常性的度量是包含在该观测结果的叶子的深度,这等于分离这一点所需的分裂次数。当叶片中有几个观察值为n_left时,将添加一个n_left样例隔离树的平均路径长度。
- 参数:
- X : array-like or sparse matrix, shape (n_samples, n_features)
- 输入样本
- 返回:
- 输入样本的异常分数。越低越可能是异常
7.set_params(self, **params)设置该森林(estimator)的参数
异常检测-基于孤立森林算法Isolation-based Anomaly Detection-2-实现的更多相关文章
- 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习
论文http://202.119.32.195/cache/10/03/cs.nju.edu.cn/da2d9bef3c4fd7d2d8c33947231d9708/tkdd11.pdf 1. INT ...
- 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-3-例子
参考:https://scikit-learn.org/stable/auto_examples/ensemble/plot_isolation_forest.html#sphx-glr-auto-e ...
- 【异常检测】孤立森林(Isolation Forest)算法简介
简介 工作的过程中经常会遇到这样一个问题,在构建模型训练数据时,我们很难保证训练数据的纯净度,数据中往往会参杂很多被错误标记噪声数据,而数据的质量决定了最终模型性能的好坏.如果进行人工二次标记,成本会 ...
- UEBA 学术界研究现状——用户行为异常检测思路:序列挖掘prefixspan,HMM,LSTM/CNN,SVM异常检测,聚类CURE算法
论文 技术分析<关于网络分层信息泄漏点快速检测仿真> "1.基于动态阈值的泄露点快速检测方法,采样Mallat算法对网络分层信息的离散采样数据进行离散小波变换;利用滑动窗口对该尺 ...
- 孤立森林(isolation forest)
1.简介 孤立森林(Isolation Forest)是另外一种高效的异常检测算法,它和随机森林类似,但每次选择划分属性和划分点(值)时都是随机的,而不是根据信息增益或者基尼指数来选择. 在建树过程中 ...
- 基于机器学习的web异常检测——基于HMM的状态序列建模,将原始数据转化为状态机表示,然后求解概率判断异常与否
基于机器学习的web异常检测 from: https://jaq.alibaba.com/community/art/show?articleid=746 Web防火墙是信息安全的第一道防线.随着网络 ...
- 26.异常检测---孤立森林 | one-class SVM
novelty detection:当训练数据中没有离群点,我们的目标是用训练好的模型去检测另外发现的新样本 outlier dection:当训练数据中包含离群点,模型训练时要匹配训练数据的中心样 ...
- Andrew Ng机器学习课程笔记--week9(上)(异常检测&推荐系统)
本周内容较多,故分为上下两篇文章. 一.内容概要 1. Anomaly Detection Density Estimation Problem Motivation Gaussian Distrib ...
- [C10] 异常检测(Anomaly Detection)
异常检测(Anomaly Detection) 问题的动机 (Problem Motivation) 异常检测(Anomaly detection)问题是机器学习算法中的一个常见应用.这种算法的有趣之 ...
随机推荐
- P1600 天天爱跑步[桶+LCA+树上差分]
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵 ...
- P2015 二叉苹果树[树形dp+背包]
题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...
- 《发际线总是和我作对》第九次团队作业:【Beta】Scrum meeting1
项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目冲刺 团队名称 发际线总和我作队 作业学习目标 (1)掌握软件黑盒测试技术:(2)掌握软件 ...
- DT6.0下搜索页解决canonical获取乱码问题
最近研究dt6.0,官方内核默认是把搜索页屏蔽的,但是做seo的人都知道,搜索页聚合是争取排名的好地方,所以我就二次开发搜索页,具体可以查看前几期分享的,今天说说关于搜索的canonical的url乱 ...
- 创建型模式(四) 建造者\生成器模式(Builder)
一.动机(Motivation) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们 ...
- Dubbo源码分析(5):ExtensionLoader
背景 Dubbo所有的模块加载是基于SPI机制的.在接口名的上一行加个@SPI注解表明要此模块要通过ExtensionLoader加载.基于SPI机制的扩展性比较好,在不修改原有代码,可以实现新模块的 ...
- 洛谷 P1140 相似基因 题解
每日一题 day23 打卡 Analysis dp[i][j]表示序列A中前i个与序列B中前j个匹配的相似度最大值 所以,dp方程很容易想到: 1.让a[i]与b[j]匹配 2.让a[i]与B序列中一 ...
- bilibili 高并发实时弹幕系统的实现
高并发实时弹幕是一种互动的体验.对于互动来说,考虑最多的地方就是:高稳定性.高可用性以及低延迟这三个方面. 高稳定性,为了保证互动的实时性,所以要求连接状态稳定: 高可用性,相当于提供一种备用方案,比 ...
- 鼠标经过图片会移动(css3过渡,overflow:hidden)
效果图如下: 代码: <body> <div><img src="jd.jpg"></div> </body> img{ ...
- Python学习之--字符串的使用
一.大小写转换 1. 首字母大写:title(); 如下: 2. 大写转换:upper(),如 3.小写转换:lower(),如 二.合并(拼接)字符串:”+“ 1. 2. 三.制表符.换行 制表符 ...