读书笔记《Outlier Analysis》 第三章 异常检测的线性模型

1.线性模型的基本介绍

1.1 回归模型

真实数据中的属性通常是相关的。这种依赖关系提供了相互预测属性的能力。

如在正常情况下,一个人的身高和体重之间具有一定的相关性;房价和房屋面积的相关性;薪资和工龄之间的相关性等。

预测和异常检测的概念是密切相关的。异常值通常是在特定模型的基础上偏离预期值(预测值)的值。

线性模型侧重于使用属性间依赖关系来实现这一目标,这也叫回归模型

1.2 回归建模的两种形式

回归建模是相关分析的一种参数化形式

     一些形式的相关分析试图从其他自变量预测因变量,如对时间序列等复杂数据类型更有用。

      其他一些形式则以潜在变量的形式总结整个数据集,如对主成分分析方法等传统的多维数据类型更有用。

1.3 线性方法的目标

线性模型中的主要假设是数据嵌入在一个较低维的子空间中。

因此,不自然拟合这种嵌入模型的数据点被称为异常值

在线性方法中,目标是找到低维子空间,其中离群点的行为与其他数据点非常不同。这些方法一般是作用在水平的(即行方向)的数据上,而不是作用在垂直的(即列的方向)上的数据。但是在高维空间中识别子空间,一般是需要集成水平和垂直的数据来识别异常值。

 

线性模型更适合于数据自然沿着低维超平面对齐的数据集。

对于异常检测这样的无监督问题,很难保证一个特定的正常数据模型是有效的(因为没有标签ground-truth,无法测试各种模型的有效性)。

从模型选择的角度来看,在异常检测的第一阶段,对数据的探索性和可视化是很关键的,因为这样可以确定特定的数据模型是否适合于特定的数据集。

 

2.两类主要的线性模型

这章主要研究两类主要的线性模型

第一类模型使用因变量和自变量之间的统计回归模型,以确定数据中特定类型的依赖关系。当某些属性自然地预测其他属性时,这种建模技术是有用的。

用一个方程式来表示它,即Y=a+b*X+e,其中a表示截距(也成为回归常数),b表示直线的斜率(也成为回归系数),e是误差项。

例如,根据时间序列中以前的值历史窗口预测时间序列的后面的值。在这种情况下,通过创建一个由因变量和自变量组成的派生数据集,并量化因变量的观测值(真实值)和预测值的偏差,从而利用面向依赖的回归建模。

再如,在第七章的在多维数据中,用于利用回归的依赖导向模型可以用于将d维数据的d个不同的回归建模问题。

第二类模型使用主成分分析来确定投影的低维子空间。

这些模型对传统的多维数据是有用的,因为所有属性都是以均匀的方式处理的,不区分自变量和因变量。

 

两种模型的异同点:

相同点:两种模型的建模形式非常相似,并使用非常相似的方法来导出最优的低维表示。

不同点:主要区别在于两种模型的目标函数的制定不同。

 

强调:

回归分析被广泛应用于检测时间序列数据中的异常(第九章)。然而,由于问题的时间序列方面也是基于时间相邻数据值的依赖关系,因此多维数据的建模过程和时间序列数据的建模过程存在一些细微的差异。

 

3.线性回归模型

在线性回归中,使用线性方程组对数据中的观测值进行建模。具体来说,数据中的不同维度使用一组线性方程组相互关联,其中系数需要以数据驱动的方式学习。

由于观测值的数目通常比数据的维数大得多,这个方程组是一个过定over-determined的方程组,不能精确求解(即零误差)。因此,这些模型学习系数,使数据点的偏差与线性模型预测的值的平方误差最小化。

回归分析使时间序列分析中的一个常见场景。回归分析需要从一组自变量(自变量也称为解释变量)中学习特定因变量的值。

这是一个具有上下文数据类型的共同主题,其中一些属性(例如时间、空间位置或相邻系列值)被视为独立的,而另一些属性(例如温度或环境测量值)被视为依赖的

对于多维数据,所有维度都以均匀的方式处理,并估计所有属性之间的最佳拟合线性关系。

 

时间序列数据案例:

在时间和空间数据域中,其中属性被划分为上下文和行为属性。在这种情况下,特定的行为属性值通常被预测为行为属性在其上下文邻域中的线性函数,以确定偏离期望值的情况。这是通过从时间或空间数据中构造多维数据集来实现的,其中特定的行为属性值(如当前时间的温度)被视为因变量,其上下文邻域行为值(如前一个窗口中的温度)被视为自变量。因此,预测因变量的重要性对于估计偏差、从而量化异常值分数至关重要。在这种情况下,异常值是根据预测因变量的误差来定义的,自变量相互关系中的异常被认为不那么重要。因此,优化过程的重点是最小化因变量的预测误差,以创建正常数据的模型。偏离词模型的数据点标记为异常值。

 

在不区分自变量和因变量的简单的线性模型中,其基本思想是假设正常数据位于特征空间中的低维超平面上。用一个点与这个低维超平面(垂直于超平面的方向)的归一化偏差来计算异常值分数。

3.1 使用依赖变量建模

变量y可以被建模为d因变量(或维度)的线性函数:

变量y是响应变量或因变量,变量x1...xd是自变量或解释变量。 系数w1...wd+1需要从训练数据中学习(如最常见的最小二乘法)。

实际上,有误差存在,因此公式为:

接下来就是对这些参数进行学习和优化,优化过程中可以使用正则化来防止过拟合等。

 

异常值的存在阻止了异常值分数的正确建模。 解决这一问题的一种方法是使用集成方法,在这种方法中,不同子集的点被重复采样,以不同的方式对数据点进行评分,并对分数进行平均。

3.1.1 使用依赖变量建模的应用

应用一:在上下文数据中,例如时空数据,这些分数可以用来发现异常的上下文异常值。

应用二:这些分数也可以用来删除那些不利于学习和回归建模应用程序的数据点。例如,在回归建模中,额可以删除训练误差较大的训练数据点,以改进学习模型。

应用三:事实证明,这种模型对于多维数据的无监督异常检测也是非常有用的。其基本思想是通过将一个属性固定为因变量,其余属性作为自变量来重复应用回归建模方法。因此,对于d为数据集,可以创建总共d个回归模型。以加权的方式添加预测每个属性的平方误差,以定义数据的异常值分数。(第七章详解)

3.1.2 均方投影误差的线性模型

上一节中是一个特定变量(行为属性)被认为是特殊的情况,并确定了最优平面,以最小化该变量残差的均方误差。

一种更一般的回归建模形式是以类似的方式处理所有变量,并确定最优回归平面,使数据对平面的投影误差最小化。

数据对平面的投影误差是点对其投影到平面的距离的平方和。

异常值分数对应于数据点与其在这个超平面上的最近点(即垂直距离)的距离。

但如果维数太大,则无法发现足够的判别异常值。因此,就可以使用接下来介绍的主成分分析方法。

4.主成分分析 PCA

主成分分析:

当数据集的维度很大时,往往会使问题非常复杂。我们希望特征个数较少而得到的信息较多。

在很多情形中,特征之间是有一定的相关关系的,当两个特征之间有一定关系时,可以解释为这两个特征存在一定的重叠。主成分分析是对原先提出的所有特征,将重复的特征删除多余,建立尽可能少的新特征,使得这些新特征是两两不相关的(即相互正交),而且这些新特征在反映问题的信息方面保持原有的信息。

通过正交变换将一组可能存在相关性的特征转换为一组线性不相关的变量,转换后的这组特征叫主成分。

PCA的属性:

1.如果将数据转换为于正交特征向量对应的轴系,则转换数据沿各轴(特征向量)的方差等于相应的特征值。在这个新的表示中,转换数据的协方差为0.

2.由于具有小特征值的特征向量的变换数据的方差较低,因此变换数据沿这些方向与平均值的显著偏差可能表示异常值。

案例:

   上图中共有三个特征X,Y,Z。发现沿着特征向量1 (eigenvector 1)的方差较大,可以保留较多的原始信息。
    特征向量对应于数据中相关的方向。 少量的特征向量可以捕获数据中的大部分方差。
        特征向量对应于数据中相关的方向。 少量的特征向量可以捕获数据中的大部分方差。
        离这个超平面(特征向量 1 )有很大距离的数据点可以被识别为异常值

PCA在异常检测中的两种思路:

1. 将数据映射到低维特征空间,然后在特征空间不同维度上查看每个数据点跟其它数据的偏差。

异常检测/离群点检测算法汇总_第3张图片

2. 将数据映射到低维特征空间,然后由低维特征空间重新映射回原空间,尝试用低维特征重构原始数据,看重构误差的大小。如果一个样本不容易被重构出来,表示这个样本的特征跟整体数据样本的特征不一致,即是异常样本。

 

5.一类支持向量机

一类支持向量机

一类支持向量机是指训练数据只有一个正类或一个负类的数据,而没有另外的一列。在这时,需要学习的实际上是训练数据的边界。因为没有两类数据,因此,不能像支持向量机中使用最大宽度的边界。

简单理解:在上图中,左边的是在原始数据空间中的边界,可以看到有很多符合要求的边界,但是比较靠谱的是找一个比较紧凑的边界,在左图中即为红色的线。这个目标转换到特征空间就是找一个距离原点较远的边界,同样是右图中的红色的线。

OCSVM和SVDD的比较

异常检测/离群点检测算法汇总_第4张图片         异常检测/离群点检测算法汇总_第5张图片目标函数

OCSVM使用于只有正常数据的场景。找到一个参数为w和ρ的超平面分割数据点和原点,超平面离原点距离越大越好,原点在这里被认作是唯一的异常点。

SVDD的思路和OCSVM类似,找到一个“球面”,将所有数据点包含在里面,寻找使“球体”体积最小的中心点a和球体积R^2。

异常检测/离群点检测算法汇总_第6张图片

 

6.线性模型的矩阵分解视图

基于矩阵分解的异常点检测方法的关键思想是利用主成分分析去寻找那些违背了数据之间相关性的异常点。为了发现这些异常点,基于主成分分析(PCA)的算法会把原始数据从原始的空间投影到主成分空间,然后再把投影拉回到原始的空间。如果只使用第一主成分来进行投影和重构,对于大多数的数据而言,重构之后的误差是小的;但是对于异常点而言,重构之后的误差依然相对大。这是因为第一主成分反映了正常值的方差,最后一个主成分反映了异常点的方差(PCA的性质:根据重构公式,我们在基于低维特征进行数据样本的重构时,舍弃了较小的特征值对应的特征向量方向上的信息。换一句话说,重构误差其实主要来自较小的特征值对应的特征向量方向上的信息。基于这个直观的理解,PCA在异常检测上的两种不同思路【重构和不重构的两种思路】都会特别关注较小的特征值对应的特征向量。)。

PCC

7.神经网络:从线性模型到深度学习

这节主要讲的一个神经网络叫做Auto encoder,即复制器神经网络或自编码器。

自编码器(Auto Encoder),其实它就是一种数据压缩算法或者特征提取算法。

其目标函数就是为了拟合一个恒等函数

对于自编码器而言,它的输入层的维度等于输出层的维度,隐藏层的维度是需要小于输入层的维度的。只有这样,自编码器才可以学习到数据分布的最显著特征。这样的话,模型就起到了压缩数据和恢复数据的作用。

7.1自编码器:

上图显示了一个包含三个隐藏层的自动编码器的示例。 请注意,输出的数量与输入的数量相同。

组成部分
    Autoencoder 的中文名叫自编码器,由 Encoder(编码器)和 Decoder(解码器)两部分构成。
基本思想
    左边部分为编码器,它可以把高维的输入压缩成低维的形式来表示,在此过程中,神经网络会尽量留下有用的信息,去除掉一些不重要的信息和噪声。
    右边部分为解码器,它负责把压缩了的数据再进行还原,努力恢复成原本的样子。

基于autoencoder和PCA类比的方法一样,先用encoder对数据编码(也相当于一个降维),再使用decoder解码,比较和原始数据的差距。模型训练的方向是越近似原始数据越好。对于异常数据,生成出的结果一般和原始数据差距较大。设置一个合适的阈值即可。

 

自编码器用于时间序列的异常检测:

针对时间序列异常检测而言,异常对于正常来说其实是少数。如果我们使用自编码器重构出来的时间序列跟之前有所差异的话,其实我们就有理由认为当前的时间序列存在了异常。其实,简单来看,基于自编码器的时间序列异常检测算法就是这样的:

原始时间序列

-> Auto Encoder(Encoder 和 Decoder)

-> 重构后的时间序列

-> 通过重构后的时间序列与原始时间序列的整体误差和局部误差来判断异常点

简单来说,只要输出的时间序列在局部的信息跟原始的时间序列不太一致,就有理由认为原始的时间序列存在着异常。

那么,首先我们需要提取时间序列中的一些子序列,例如我们可以提取今天(today),昨天(yesterday),一周前(week)的数据,基于同样的时间戳把它们重叠在一起,也就是下图这个形式。其中,蓝线表示一周前的数据,黑线表示昨天的数据,红色表示今天的数据。

AutoEncoder4

基于一条很长的时间序列,我们可以提取它的很多子序列,从而构造出很多的片段序列。这些片段序列就可以形成自编码器的输入数据,而自编码器是模拟一个恒等变换,因此它会把有异常的点尽量磨平,而正常的点则保持原样。所以,通过大量子片段来进行训练数据的输入,自编码器就能够得到一个较为合理的权重。得到了一个训练好的自编码器之后,对于任何一个子片段,都可以重构出一个新的片段。例如上面的子片段就可以重构成下图:对于今天的数据(today),那个凸起被直接抹平;对于昨天的数据(yesterday)而言,那个凹下去的部分也被磨平。基于时间序列重构前和重构后的数据差异,可以获得时间序列的异常点。

AutoEncoder5

 

8.线性模型的局限性

线性模型作用的数据对象需要高度相关,并沿着低维子空间对齐,以便回归分析技术可用。

当数据不相关时,但高度聚集在某些区域时,这种方法可能无法有效工作。在这种情况下,非线性模型和核方法可用。但是这些方法计算上是密集的,并且往往会导致过拟合。

另一个相关的问题是,数据中的相关性不是全局的。在这种情况下,PCA发现的全局子空间对于异常点分析不是最理想的。因此,为了创建更通用的局部子空间模型,有时将线性模型和邻近模型结合起来是比较有效的。这在高维子空间异常检测中将会介绍。

当数据集比较小时,模型很容易过拟合。(基本上所有模型都有这个问题)

基于回归的模型的可解释性相当低。这些方法将数据投影到更低维的子空间中,这些子空间表示为原始特征空间的线性组合。在许多实际问题中,这在物理意义上是不容易解释的。这也有降低用户对特定应用程序的内涵知识的有害影响。

当数据的维数较大时,该方法的计算复杂度可能是个问题。当数据具有d维时,这会导致d*d协方差矩阵,这可能时相当大。这些方法可以用集成方法改进。但是随着软硬件的提高,矩阵的计算将不再是主要问题。神经网络和深度学习今年来逐渐流行。

9.总结

本章给出了异常检测的线性模型。许多数据集显示了不同属性之间的显著相关性。在这种情况下,线性建模可以为从底层数据中删除异常值提供有效的工具。

在大多数情况下,PCA为异常点的去除提供了最有效的方法,因为它对数据中少数异常点的存在更具有鲁棒性。这种方法也可以推广到非线性模型,虽然可能会过拟合。

许多其他数学模型,如SVM、矩阵分解和神经网络,都使用了这些概念的不同变体。

多层神经网络可以对复杂和非线性模式进行建模,特别是采用深度学习。

除了神经网络之外,这些模型大多是全局模型,他们不识别不同数据区域中不同的子空间和相关模式。然而,它提供了一个通用的框架,可以用于广义局部线性模型。

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 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、付费专栏及课程。

余额充值