首页 > 编程知识 正文

forest官网,forest专注森林怎么玩

时间:2023-05-06 17:29:05 阅读:144305 作者:3758

异常检测的离群点是一个数据集内与其他数据点明显不同的数据点。 异常检测是指找出数据中偏离点(与大多数数据点明显不同的数据点)的过程。

脱离现实世界中大型数据集的模式非常复杂,显示数据可能很难找到模式。 所以异常检测的研究是机器学习中极其重要的应用。

孤立森林原理孤立森林(Isolation Forest )由西瓜书作者周志华团队于2008年提出,以其线性的时间复杂度和优良的准确率被广泛应用于工业界结构化数据的异常检测。

孤立森林、孤立森林的基本理论基础有二:

异常数据占全部样本量的比例少的异常点的特征值与正常点有很大不同。 公众对孤立森林的理解一句话概括了孤立森林的基本原理,异常样本相较普通样本可以通过较少次数的随机特征分割被孤立出来样本空间有很多数据,其中有些密集,有些分布稀疏。 如果该数据几乎都是密集分布的,稀疏的部分不就是所谓的离群点吗? 那么,孤立的森林是如何找到这些离群点的呢?

例如,假设这些采样点具有年龄特征。 在孤立森林的随机选择中,年龄70为异常,年龄=70为正常。 此时,在样本空间中描绘了超平面。 其次,孤立森林的特点之一是收入。 假设收入1w异常,收入=1W正常,在样本空间绘制超平面……凭直觉,分布在稀疏位置的点,很少次数的超平面分割不是就能孤立吗? 分布在密集位置的点为了孤立,需要更多次数的超平面分割。 如下图所示,分布密集位置的xi在11个超平面上孤立,分布稀疏位置的x0在4个超平面上孤立。

超平面分割假设一棵树用这种方法把x0当成离群点,但这个结果不一定准确。 因为随机选择的特征和阈值有很多偶然性。 但是,引入bagging的思想,我用100棵树进行了这样的随机分割,其中90个结论都认为x0是离群点,所以这个结果是可靠的。

算法详细的单树训练从单树训练的伪代码训练数据中随机选择个点作为子样本,在放入孤立树根节点的当前节点数据范围内,在当前节点数据指定的维度最大值和最小值之间随机选择截断点p —— 此切割点的选择将生成将当前节点的数据空间划分为两个子空间的超平面。 将当前选定维下小于p的点放置在当前节点的左分支中,将大于或等于p的点放置在当前节点的右分支中。 在节点的左分支和右分支的节点递归步骤2、3中,继续构建新的叶节点,直到叶节点只有一个数据(不能再剪)或者树生长到设定的高度。 是怎么整合多棵树的结果? 孤立森林与随机森林相似,随机采样数据逐树训练,保证所建森林方差足够大,即越不相似越好。 构建孤立森林时,需要设置两个参数:树的数量t和每棵树采样大小的最大值。

森林通过导入异常值函数s(x,n )来测定记录x是否为异常点

s(x,n,这里,e ) h ) x ) )是x的多个树中的路径长度的期望值。

c(n )-h ) * (其中c(n )是包含n个样本的数据集,并且树的平均路径长度用于标准化记录x的路径长度。 h(* )为调和数,为欧拉常数,约为0.5772156649。

s(x,n )和e (h ) x ) )的关系s ) x,n )和e (h ) x ) )的关系2 isolation forest伪代码一棵树的最大高度常见问题解答qes :为什么需要限制树的高度?

ans:之所以对树的高度有限制,是因为我们只关心路径长度的短点,它们很可能是异常点,不关心路径长度的长正常点

qes:树怎么选?

ans:从下图可以看出,当t=100时,上述划分xi和x0的平均路径长度收敛,因此论文建议将t设定为100。

平均路径长度与t的关系qes:样本的采样量如何取值?

ans:论文推荐设置为2 ̄8或256,可以为异常检测任务提供足够的详细信息。 下图显示了部分采样的作用,蓝色表示正常样品,红色表示异常样品。 采样前正常标本与异常标本重叠,难以分离,但采样后发现异常标本与正常标本可明显分离。 另外,采样可以减少计算时间和空间上的浪费。

部分抽样的效果

qes: isolation forest的复杂性如何?


ans: 训练一个iforest的时间复杂度为o(tΨlogΨ)。 实践中的参数调节

我们使用sklearn中的孤立森林,进行参数调节讲解,一般任务默认参数即可。import sklearn.ensemble.IsolationForest as iforest

n_estimators : int, optional (default=100) 指定该森林中生成的随机树数量

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使用的样本都是一样的,即所有的样本

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

max_features : int or float, optional (default=1.0)
指定从总样本X中抽取来训练每棵树iTree的属性的数量,默认只使用一个属性
如果设置为int整数,则抽取max_features个属性
如果是float浮点数,则抽取max_features * X.shape[1]个属性

bootstrap : boolean, optional (default=False)
如果为True,则各个树可放回地对训练数据进行采样。如果为False,则执行不放回的采样。

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

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版本中移除

random_state : int, RandomState instance or None, optional (default=None)
如果设置为int常数,则该random_state参数值是用于随机数生成器的种子
如果设置为RandomState实例,则该random_state就是一个随机数生成器
如果设置为None,该随机数生成器就是使用在np.random中的RandomState实例

verbose : int, optional (default=0) 训练中打印日志的详细程度,数值越大越详细

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。