2022吴恩达机器学习第3课week1

文章介绍了吴恩达机器学习课程中的第三课内容,主要涉及无监督学习中的聚类算法K-means,包括算法原理、优化目标和初始化策略。同时,讲解了异常检测方法,如密度法和高斯正态分布的应用,以及如何选择特征和评估异常检测系统。
摘要由CSDN通过智能技术生成


异常检测

1-1 欢迎来到第三课

课程概况:
在这里插入图片描述

2-1 什么是聚类

聚类算法着眼于很多数据点,自动查找彼此相关或相似的数据点。
分类算法是监督学习算法,而聚类算法是无监督学习算法。
在这里插入图片描述

2-2 K-meaens直观理解

K-means主要要做的两件事情:

  1. 将数据点分配给聚类中心,通过计算距离。
    在这里插入图片描述2. 移动聚类中心,通过计算平均坐标。在这里插入图片描述
    重复以上两个步骤,直到中心位置不再改变(收敛)。

K-means算法

实现:
在这里插入图片描述

  1. 初始化k个聚类中心。
  2. 计算每个数据点与每个聚类中心的距离,按就近原则进行分配。
    c i c_i ci是分配给点 x i x_i xi的聚类索引,标示该点进入哪个聚类。
  3. 计算聚类数据点平均值,移动聚类中心。
  4. 重复步骤2,3,知道达到停止条件。
    注意:若有一个聚类中心没有被分配数据点,则通常会取消该簇,即算法变为寻找k-1个簇。也可以重新规划聚类中心。

K-means算法不仅可以用于数据点已经被分离的情况,也可以用于数据点没有被很好地分离的情况。
在这里插入图片描述

2-4 优化目标

与监督学习的损失函数最小化类似,K-means算法也试图最小化以下损失函数或者失真,即平方距离
在这里插入图片描述
通过运行正确的K-means算法,成本函数是下降或者保持不变的,永远不会上升,所以它是收敛的。
有时运行了很大事件的K-means,损失函数下降缓慢,我们可以认为其已经接近收敛。

2-5 初始化K-means

与前两节不同,我们随机择训练集中的样本点作为初始化的聚类中心,会获得更好的效果。
在这里插入图片描述
选择初始聚类中心不当可能会导致陷入局部最优的问题,如下图所示,此时成本函数不再减小。
在这里插入图片描述
为了解决局部最优的问题,我们使用多组的聚类中心初始化,并选择具有最小损失函数的结果。如实现3组聚类结果,最终选择第一种方案作为最终聚类结果。
在这里插入图片描述
一般会尝试50-1000次不同的随机初始化,这会得到一个更好的聚类结果。

2-6 选择聚类数量

由于聚类算法是无监督学习,所以我们可能不知道原始数据到底是几个类别,从而无法确定k的值,有一种方法——肘部法则,我们需要尝试一系列的k值,并绘制图像。如左图,我们发现在k=3处,曲线有弯曲且下降速度较快,称为肘部,之后下降缓慢。此时取k=3较为合适。而对于右图,很多时候图像是平缓的,所以无法确定肘部,我们一般选择可行范围的最大值。
在这里插入图片描述
通过选择k值来降低损失函数不是一种好的办法。
好的办法是评估k值对后续的用途中的效果。对可能选择的聚类数量产生的效果进行衡量,比如短袖的尺码分为3种还是5种。

3-1 发现异常事件

第二种无监督学习算法:异常检测——在数据点中发现异常数据。
比如通过飞机发动机特征(散发的热量、震动强度等)来检测飞机是否异常。
在这里插入图片描述
收集一部分正常发动机的数据并绘制散点图,直觉上,当新实例的位置与其他正常数据相似,我们认为它是正常的,否则异常。

密度法:

为数据集建立模型,并估计椭圆/环形区域中点出现概率,中心概率最高。给出一个新实例,估计其为正常的概率,若低于一个阈值,就将其视为异常点。
在这里插入图片描述
异常检测通常用于欺诈检测,既以用来检测假账户,也可以检测金融诈骗。
在这里插入图片描述

3-2 高斯正态分布

使用高斯正态分布来建立模型。
在这里插入图片描述
图像的中心由μ决定,宽度由σ决定。
给定一个数据集,根据他的分布,我们需要估计其均值和方差。
可以使用以下公式,也可以使用最大似然估计。
在这里插入图片描述
一个新实例特征的值在模型中的概率越低,越可能是异常值。
在统计学中,上面计算 σ 的平方的公式里面的 m 也可以是 m-1 ,但是在机器学习领域中我们常用 m 的版本,虽然两个版本在理论特性和数学特性上稍有不同,但是在实践中二者的区别很小,只要我们有一个还算大的数据集,就都可以估计出一个很好地参数。

3-3 异常检测算法

在实际应用中,一个实例可能具有多个特征,不易通过绘图来检测异常。
继续以上发动机的例子,每一个实例都是一组二维数据,要进行密度估计,我们需要建立p(x)的模型并估计给定新实例的概率。
p(x)是单个特征(相互独立)概率的乘积。
在这里插入图片描述
在这里插入图片描述

  1. 选择合适的度量特征。
  2. 拟合参数。
  3. 检测新案例。
    当有一个特征概率异常小时,会导致p(x)异常小。
    在这里插入图片描述
    曲面图上的概率等于两个平面图上相应概率的乘积。

3-4 开发与评估异常监测系统

实数评估:如果有一套评估系统通过返回一个实数来评估你的算法,一个系统即使在开发过程中,也可以做出决定和改进。

  • 我们先假设有一训练集,并把该训练集看作是无标签的,所以它是一个很大的正常样本(或无异常样本)的集合。通常来说,把它们看作是无异常样本,即使溜进了一些异常样本也没关系。
  • 接下来我们要定义一个交叉验证集和测试集,用来评估这个异常检测算法。具体来说,对交叉验证集和测试集,假设在交叉验证集和测试集中,包含一些已知是异常的样本,所以在测试集中,有一些标签是 y = 1 的样本(代表异常的飞机引擎)。
    在这里插入图片描述
    假如10000个发动机,其中包含少数异常样本。
  • 将6000个作为训练集,并假设全部为正常样本(因为极少数异常样本不会影响结果)。
  • 2000个作为交叉验证集,其中要包含10个已知的异常样本(y=1)。
  • 2000个作为测试集,其中要包含10个已知的异常样本(y=1)。
    在这里插入图片描述
  1. 在训练集上训练模型。
  2. 在交叉验证集上优化参数 ε ,让算法更可靠;测试保留或去掉某个特征时算法的效果。
  3. 将测试集的结果当做最终评估指标。
    这仍然是无监督学习算法,因为训练集是无标签的,尽管我们假设其都是正常的。
    另一种异常检测算法:在已知的异常样本非常少时,如2个,没有能力创建训练集,所以只有训练集和交叉验证集(优化参数),缺点是使用交叉验证集的结果作为评估结果是不客观的。
    在这里插入图片描述
    异常检测的数据集存在数据倾斜的问题,可以使用 F 1 − s c o r e F_{1}-score F1score 的方式进行评估。
    在这里插入图片描述

3-5 异常监测与监督学习对比

假如我们有带标签的数据,如果我们有已知的是异常的例子,还有一些已知正常的例子,如何选择使用异常检测方法还是监督学习的方法?

  • 正常例子数量很少(记住y=1时这些例子为异常样例),那么你可以考虑使用一个异常检测算法。典型情况下,我们有 0 到 20 个,可能最多到 50 个正样本,通常情况下,我们只有非常少量的正样本,接下来我们保存这些正样本用于交叉验证集和测试集
  • 未来可能出现的异常看起来可能会与已有的截然不同(没有足够的正样本用来学习),所以可能在正样本中,你可能已经了解 5 个或 10 个或 20 个航空发动机发生故障的情况,但是可能到了明天,你需要检测一个全新的集合、一种新类型异常、一种全新的飞机发动机出现故障的情况,而且之前从来就没有见过。如果是这样的情况,那么我们就更应该对负样本用高斯分布模型 p(x) 来建模,而不是费尽心思对正样本建模,因为明天的异常可能与迄今为止见过的情况完全不同。
  • 足够数量的正样本或是一个已经能识别正样本的算法,尤其是,假如你认为未来可能出现的正样本与你当前训练集中的正样本类似,那么这种情况下使用一个监督学习算法会更合理,它能够查看大量正样本和大量负样本来学到相应特征,并且能够尝试区分正样本和负样本(从正样本y=1中学习)。
    在这里插入图片描述
    一些应用:
    在这里插入图片描述

总结: 当遇到一个特定问题时,我们应该能够判断出是用异常检测算法还是监督学习算法。二者的关键不同在于,在异常检测中,我们通常只有很少量的正样本,因此对于一个学习算法而言,它是不可能从这些正样本这学习到足够的知识的,所以我们要做的是使用大量负样本,试图学出未出现过的全新正样本,从那些负样本中学习 p(x) 的值,比如说是飞机发动机故障的情况,我们保留小数量的正样本,用来评估我们的算法,这个算法用于交叉验证集或测试集。

3-6 选择使用什么特征

应用异常检测时,其中有一个因素对运行有很大影响,那就是使用什么特征,或者说选择什么特征来实现异常检测算法。

选择值很大或者很小的特征

通常来说,我们选择特征的方法是选择那些特别大或者特别小的特征(那些很可能异常的样本中)。

确保选择的特征是或近似于高斯分布,或者转换数据使其近似于高斯分布。

在这里插入图片描述
在代码中,不断尝试不同的转换方式使其更近似于高斯分布:
在这里插入图片描述
还存在一些自动检测原始分布与高斯分布相似程度的算法,但是实践表明,上述方式已经足够了。
注意应对交叉验证集和测试集做相同的数据转换。

通过误差分析步骤来得到异常检测算法的特征。

通过一个误差分析步骤,这跟之前讨论监督学习算法时误差分析步骤是类似的,先完整地训练出一个算法,然后在一组交叉验证集上运行算法,然后找出那些预测出错的样本,并看看我们能否找到一些不寻常的可能使预测出错的新特征来帮助学习算法,然后添加此特征,使该样本与其他样本区分开,提高算法的性能。
在这里插入图片描述

还可以在原有特征的基础上将相关特征进行组合

数据中心的监控计算机的特征,包括占用内存,磁盘每秒访问次数,CPU 负载,网络流量。假如猜测正常计算机CPU 负载和网络流量应该互为线性关系,如我们运行了一组网络服务器,如果其中一个服务器正在服务很多个用户,那么CPU负载和网络流量都很大。但有一台计算机CPU负载升高,但网络流量没有升高,可能的出错情形是我们的计算机在执行一个任务或一段代码时,进入了一个死循环卡住了,因此CPU负载升高,但网络流量没有升高,因为只是CPU执行了较多的工作,所以负载较大,卡在了死循环里。
所以创造两个特征的比值作为用于监测的新特征:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值