高维数据的异常检测

一、概述

主要内容包括

  • Feature Bagging
  • 孤立森林
    在实际场景中,很多数据集都是多维度的,随着维度的增加,数据空间的大小会以指数级别增长,使数据变稀疏。维度诅咒不止给异常检测带来了挑战,对距离的计算、聚类都带来了难度。例如,在之前介绍的基于邻近度的方法是在所有维度中使用距离函数来定义局部性,但是,在高维空间中,所有点对的距离几乎是相等的,这使得一些基于距离的方法失效。在高维场景下,一个常用的方法是子空间法。
    集成是子空间思想中常用的方法之一,可以有效提高数据挖掘算法精度。集成算法将多个算法或多个基检测器的输出结合起来。其基本思想是一些算法在某些子集上表现很好,一些算法在其他子集上表现很好,然后集成起来使得输出更加鲁棒。

二、Feature Bagging

基本思想与bagging相似,只是对象是Feature。实现步骤:

  • 选择基检测器,Feature Bagging常用LOF为基检测器,下图是Feature Bagging的通用算法:
    在这里插入图片描述
  • 分数标准化和组合方法
    不通检测器可能会在不同的尺度上产生分数。下图是两个feature bagging两个不同的组合分数方法:

在这里插入图片描述(广度优先)
在这里插入图片描述
(累积求和)

三、孤立森林

核心思想:

  • 异常点相比其他数据点较为疏离,只需少数几次切分就可以被隔离,即异常样本更容易被划分至叶结点,从而使得异常样本所属的叶结点距离根节点有更短的路径长度。

  • 在iTree中,异常点被isolated后,更加靠近树的根部,而正常数据在树中更深。
    训练过程

  • 抽取若干个样本构成子样本集,放置于根节点,用于训练单颗itree

  • 随机选择一个特征q作为起点,然后在特征q的最大值和最小值之间随机选择一个值p作为分割点

  • 根据属性q的取值进行分支,把q< p 的样本划分至左子节点,把q>p的样本划分至右子结点

  • 重复上边两步,递归构造左子节点和右子结点,知道满足下列条件之一:

    • 数据不可再分
    • 二叉树达到了限定的最大深度
  • 获得t个iTree后,孤立森林训练就结束了。
    下面是代码介绍,这里直接调包

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest

rng  = np.random
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
localoutlierfactor(局部离群因子)是一种常用的异常数据检测方法。其基本思想是判断一个数据点是否为异常点,需要考虑其周围邻居点的密度和分布情况。 对于给定的数据集,localoutlierfactor方法首先计算出每个数据点的局部密度,即该点周围邻居点的密度,通过设定邻居点的个数K来确定。如果一个数据点的K个邻居点很近,说明它处在一个高密度的区域,那么该点的局部密度就会较高;相反,如果这些邻居点离得较远,说明它处在一个低密度的区域,那么该点的局部密度就会较低。 接着,对于每个数据点,计算出其与邻居点相对密度的比例,即局部离群因子(LOF)。如果一个数据点的LOF值大于1,说明该点周围的邻居点的密度比它自身密度更低,即该点是异常点;相反,如果LOF值小于1,则说明该点周围的邻居点的密度比它自身密度更高,即该点是正常点。 通过计算数据集中每个点的LOF值,localoutlierfactor方法能够有效地识别出异常数据点。与传统的基于距离或数值的异常检测方法相比,localoutlierfactor可以更好地适应不同数据分布的情况,并且在处理高维数据和大规模数据时也具有较好的效果。 总之,localoutlierfactor是一种基于密度的异常数据检测方法,通过考虑数据点的局部密度和分布情况,判断数据点是否为异常点,具有较好的鲁棒性和适应性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值