Stanford机器学习-异常检测和多元高斯分布

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Forlogen/article/details/83475506

一、异常检测

这章主要学习异常检测问题,它是机器算法的一个常见应用,同时也对于我们生活中的很多问题有很大的帮助,总的来说,它主要用于非监督的学习问题。
在这里插入图片描述
那我们怎么来理解异常检测是一个怎么样的问题呢?我们来看一个相关的问题:飞机引擎的检测。因为引擎对于飞机来说是一个很重要的部件,所以对于它的质量把关,是一个很重要的事。假如我们通过检测测得了引擎的发热量记为 x1 ,引擎的振动记为 x2 等等一系列的特征参数,这样我们就得到了一个数据集 {x1 , x2 , …,xm}。我们将其图像化后,就可以得到上图的点分布图,图中的每个×就是我们的一个数据。

在这里插入图片描述

那么当我们得到一个新的引擎的监测数据Xtest时,我们如何判断它是否是一个异常的数据呢?这就是我们要解决的问题。假设我们的数据集中所有的 × 所代表的就是正常的引擎,我们可以将其以中心扩展为多个同心圆,越靠近中心的数据,是正常的概率就越大。当我们得到一个新数据时,我们将其在图中表示,判断他在这个模型P(x)中的值,如果它大于某一个阈值,我们就认为它是正常的,否则认为存在问题,需要进一步的检测。

在这里插入图片描述

异常检测在日常中应用最广泛的地方就是欺诈的识别。我们呢可以在线采用多个用户的多个特征数据,来构建一个模型P(x),这些特征可能包括登录的频率、访问的历史纪录等等。当有新的用户时,我们就可以采集相关的特征,使用P(x)来判断是否是有欺诈可能性的用户。另外一个常用的地方就是数据中心对于异常电脑的检测,我们可以采集一些特征,比如内存的利用、磁盘的访问量、CPU的负载等等,同样我们可以根据需要构造一些特征数据,来帮助我们构建模型,从而用来判断是否有电脑出现异常。

二、高斯分布(正态分布)

在这里插入图片描述

高斯分布是统计学中一个很重要的分布,学过数理统计的应该对它都不会感到陌生。下面我们对高斯分布的相关知识做一个回顾。假设我们的数据 x 服从均值为 μ ,方差为σ^2的高斯分布,我们就可以写成 x ~ N ( μ , σ ),他对应的概率密度函数如下

在这里插入图片描述
将数据画在图中,我们可以看出它是一个对称的钟形的曲线,μ 表示对称点的位置,而 σ 表示数据偏离中心轴的多少。
在这里插入图片描述
那我们如何根据现有的数据来得到 μ 和 σ 这两个参数呢?我们通常使用如下的公式计算

在这里插入图片描述
这里我们计算方差的公式中使用的是 m ,在之前统计学中见到的公式,可能用的是 m-1,其实两个在使用中并没有那么大差别,在机器学习中我们常使用的是 m 。
在这里插入图片描述
当给定不同的均值和方差时,我们就可以得到不同的高斯分布,上图是不同参数的几个高斯分布的例子。

三、使用高斯分布的异常检测算法

在这里插入图片描述
在我们拥有的数据集中{x1 , x2 ,…,xm},我们包含多个特征,我们可以针对每一个特征 xi 利用上面的公式来计算 μ 和 σ^2,我们就可以得到m 个高斯分布,我们便可以构建模型
在这里插入图片描述
当给定一个新的实例时,我们就可以根据模型来计算p(x)的值,当结果小于给定的阈值时,我们说就发生了异常。

在这里插入图片描述
具体的算法的过程如上图所示。

在这里插入图片描述
假如我的数据集中只有两个特征 x1 和 x2 ,我们将其画图便可以得到左上图的图像,同样我们根据公式分别计算两个特征对应的高斯分布的参数,并画出对应的图像。在三维图像中表示,如右下图所示,图像的高度就是p(x) 的值。我们给定一个阈值 0.02,当有新的数据时(如绿色×),带入模型计算相应的值,,来判断是否有异常。

四、开发和评价一个异常检测系统

在这里插入图片描述
当我们开发了一个异常检测的算法后,如果我们有一个衡量标准后,我们就可以相对容易的评价模型的好坏。假设我们拥有一些带标签的数据(y = 0 表示正常,y = 1表示异常),我们便可以将其分为训练集、交叉验证集和测试集。
在这里插入图片描述
在我们前面飞机引擎的例子中,假设我们现在的数据集中包含1000个好的引擎,20个不好的。我们就可以将其进行如下的划分:
• 训练集:6000个好的引擎数据,构建一个模型
• 交叉验证集:2000个好的+10个异常的数据
• 测试集:2000个好的+10个异常的数据
或者使用其他的分配策略也是可以的。
在这里插入图片描述
那我们怎么在分好的数据集中训练模型呢?我们使用数据集构建了模型p(x);然后在交叉验证集上,我们尝试不同的 ε 做我们的阈值,然后根据查准率、查全率或是F1值来选择最好的 ε ;选择好之后,我们就可以在测试集上进行预测,计算异常检验系统的相关评价标准。

五、监督学习和异常检测的对比

在这里插入图片描述
在前面我们说过,在异常检测中,我们使用的也是带标签的数据,那么它和学过的有监督学习有什么区别呢?当我们拥有非常少的正类数据,而反类数据很多时,以及许多不同种类的异常,使得模型很难从正类数据中学习到异常应该是什么样子,而且未来遇到的异常可能与已掌握的异常非常的不同,这样的情况我们将使用异常检测。但当我们同时有大量的正类数据和反类数据时,我们有足够多的正向实例,用来训练算法,而且未来遇到的正向实例可能与训练集中的非常近似,这时我们应使用监督学习算法。
在这里插入图片描述
异常检测常用于:欺诈行为的检测、生产中产品质量的检测、数据中心中异常电脑的监控。
监督学习就不陌生了,常用于邮件分类、天气预报和肿瘤分类等。

六、特征的选择

在这里插入图片描述
在异常检测算法中,合适的特征的选择对于算法来说有着很重要的影响。我们假设检测的特征符合高斯分布,如果现有的数据并不是很明显的满足高斯分布时,我们可以将其取对数或者进行幂次计算,将其转换成高斯分布。

在这里插入图片描述
在异常检测中,当我们遇到一些新数据时,将其输入模型,也可以得到很高的 p(x) 的值,从而被算法误认为是正常的,这将有很大的影响。我们需要误差分析来帮助我们分析那些被误分的数据,观察能否找出一些问题,然后通过构建新的特征来使得算法发挥更好的作用。
在这里插入图片描述
例如前面数据中心的例子中,我们有如上的诸多特征,有时现有的特征会遗漏一些问题,这时就需要我们进行特征的组合,比如我们可以将CPU负载和网络流量组合,创建新的特征 x5 x6等,如果对应的值异常的大,说明就有问题了。

七、多元高斯分布

在这里插入图片描述
假设我们有两个相关的特征,而且每个特征的值域范围很大时,一般的高斯模型将不能很好的识别异常的数据。比如左上图,我们根据不同的 ε 可以画出不同的边界,加入新的数据如绿色的×,他很可能是异常的,但是在现有的模型下,他会被判为正常的。因为一般的高斯模型所做的是尝试同时抓两个特征的偏差,这样边界的范围就会变得很大。所以我们需要使用多元高斯分布来解决这个问题,也就是创建蓝色的边界。
在这里插入图片描述
在一般的高斯分布中,我们首先计算每个特征的p(x),然后将其连乘。而在多元高斯分布中国,我们需要构建特征的协方差矩阵,用所用的特征一起来计算p(x)。我们先计算特征的均值和协方差矩阵:
在这里插入图片描述
最后计算多元高斯分布的p(x)

在这里插入图片描述
下面是有关不同的μ 和协方差矩阵 Σ 的图像,当参数不同时,得到的图像也就有相应的区别。
在这里插入图片描述
当μ 相同时,Σ 的主对角线上的值越小,则图像越窄,越大时越宽。
在这里插入图片描述
当改变 Σ 主对角线某一个值时,他会在相应的跨度上做出改变。
在这里插入图片描述

在这里插入图片描述
在保持原有偏差的基础上增加两者的正相关性。
在这里插入图片描述

在这里插入图片描述

在保持原有偏差的基础上增加两者的负相关性。一般的高斯分布是多元高斯分布的子集,即在协方差矩阵的主对角线上元素不为零,其余都是零。下面是关于一般高斯模型和多元高斯分布模型的一个对比
在这里插入图片描述

在一般高斯模型中,如果特征之间存在着某种程度上相互关联,我们可以通过构建新的特征来捕捉相关性。但如果训练集不大,特征相对较少时,我们可以使用多元高斯分布模型。

八、在异常检测中使用多元高斯分布

在这里插入图片描述
上面我们看到了有关多元高斯分布的情况,当我们的参数不同时,我们可以得到不同的模型,那我们怎么将其应用到异常检测中呢?在多元高斯分布中,我们的参数是 μ (n1的向量)和 Σ (nn的矩阵),我们需要使用数据来拟合这些参数。假如我们有数据集{x1 ,x2, …, xm},我们可以使用如下的公式来拟合
在这里插入图片描述
在这里插入图片描述
那么我们如何将上面的一切应用到异常检测算法中呢?首先我们需要根据我们的数据集拟合参数,构建多元高斯分布模型p(x),然后在给定一个新的值时,我们根据上面的公司计算p(x)的值,和设定的阈值进行比较,判断是否出现异常。
在这里插入图片描述

在这里插入图片描述
上面是原始模型和多元高斯分布的一个对比。原始模型需要我们手工的构建一些特征来把握特征件的联系,但是计算量小,当数据量较小时,我们可以使用。但多元高斯分布模型可以自动的抓住特征间的联系,计算量相对较大,通常用在特征较少的情况下

猜你喜欢

转载自blog.csdn.net/Forlogen/article/details/83475506