吴恩达机器学习笔记part3

十、决策树模型

十一、无监督学习,聚类和推荐系统

本章主要介绍无监督学习,推荐系统。

11.1 聚类

11.1.1 什么是聚类

在这个视频中,我将开始介绍聚类算法。这将是一个激动人心的时刻,因为这是我们学习的第一个非监督学习算法。我们将要让计算机学习无标签数据,而不是此前的标签数据。

那么,什么是非监督学习呢?在课程的一开始,我曾简单地介绍过非监督学习,然而,我们还是有必要将其与监督学习做一下比较。 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区分正样本和负样本的决策边界,在这里的监督学习中,我们有一系列标签y,我们需要据此拟合一个假设函数。

与此不同的是,在非监督学习中,我们的数据没有附带任何标签,我们拿到的数据就是这样的。

在这里我们有一系列点,却没有标签。因此,我们的训练集可以写成只有𝑥(1),𝑥(2).....一直到𝑥(𝑚)。我们没有任何标签𝑦。因此,图上画的这些点没有标签信息。也就是说,在非监督学习中,我们需要将一系列无标签的训练数据,输入到一个算法中,然后我们告诉这个算法,快去为我们找找这个数据的内在结构给定数据。我们可能需要某种算法帮助我们寻找一 种结构。图上的数据看起来可以分成两个分开的点集(称为簇),一个能够找到我圈出的这些点集的算法,就被称为聚类算法。

在实际应用中,例如新闻分类,例如访问学习网站的目的,DNA分类,天文学天体分类等。 

11.1.2 K-means算法

K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。

K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为:

首先选择𝐾个随机的点,称为聚类中心(cluster centroids);

对于数据集中的每一个数据,按照距离𝐾个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。

计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。

重复步骤 2-3直至中心点不再变化。

下面是一个聚类示例:

1.首先随机猜测选择两个点作为聚类中心(红叉和蓝叉),然后遍历所有点,把距离其中某个中心点更近的点分配给该中心。

2.计算全部红色点的平均值,把中心点移动到这个平均值,蓝色点同理。

3.重复第一步,继续遍历全部点,选择离其最近的聚类中心点,重新归类。

4.重复第二步

 5.继续重复第一步和第二步的工作,直到所有点不在重新分配和移动聚类中心点。

用𝜇1,𝜇2,...,𝜇𝑘 来表示聚类中心,用𝑐(1),𝑐(2),...,𝑐(𝑚)来存储与第𝑖个实例数据最近的聚类中心的索引。接下来实现K-means算法,第一步是遍历m个点,对每个点选择离它最近的中心点,在代码的例子中,选择两个中心点\mu{_{1}}\mu{_{2}},两个特征说明每个点(包括中心点)的向量长度是2,第m个点属于的中心是c^{^{(i)}},如果某个点属于\mu{_{1}},则c^{^{(i)}} = 1

分配完全部点的聚类中心之后,第二步遍历全部K个聚类中心点(这个例子中是两个聚类中心),计算每个聚类中心更新后的平均值位置,对应右图是计算所有点的横纵坐标平均值,把新的值赋给聚类中心。

然后再重新所有步骤直到收敛。

 在算法过程中,有可能会遇到一些问题,例如某个聚类中心没有分到任何点,一般解决方法是消除这个点,或者是重新生成初始点重新进行迭代。

K-均值算法也可以很便利地用于将数据分为许多不同组,即使在没有非常明显区分的组群的情况下也可以。下图所示的数据集包含身高和体重两项特征构成的,利用 K-均值算法将 数据分为三类,用于帮助确定将要生产的 T-恤衫的三种尺寸。

11.1.3 优化目标

K-均值算法是否一定会收敛呢?答案是肯定的。

K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和, 因此 K-均值的代价函数(又称畸变函数 Distortion function)为:

 其中𝜇𝑐(𝑖)代表与𝑥(𝑖)最近的聚类中心点。 我们的的优化目标便是找出使得代价函数最小的 𝑐(1),𝑐(2),...,𝑐(𝑚)和𝜇1,𝜇2,...,𝜇𝑘。回顾刚才给出的K-均值迭代算法,我们知道,第一个循环是用于减小𝑐(𝑖)引起的代价, 而第二个循环则是用于减小𝜇𝑖 引起的代价。迭代的过程一定会是每一次迭代都在减小代价函数,不然便是出现了错误。参考下图,优化代价函数也是分为两步,第一步是优化𝑐(1),𝑐(2),...,𝑐(𝑚)的值(更新每个点的所属集群分配),第二步是更新𝜇1,𝜇2(更新集群中心),以使代价函数减小。

举一个简单的例子。

11.1.4 初始化和选择聚群数量

在运行 K-均值算法的之前,我们首先要随机初始化所有的聚类中心点,如何让初始值的选择做得更好呢?下面介绍怎样做:

1. 我们应该选择𝐾 < 𝑚,即聚类中心点的个数要小于所有训练集实例的数量

2. 随机选择𝐾个训练实例,然后令𝐾个聚类中心分别与这𝐾个训练实例相等

下图,K-均值的一个问题在于,它有可能会停留在一个局部最小值处,而这取决于初始化的情况,最上面的图是最优的,别的图可能会陷入局部最优。

为了解决这个问题,我们通常需要多次运行 K-均值算法,每一次都重新进行随机初始 化,最后再比较多次运行 K-均值的结果,选择代价函数最小的结果。这种方法在𝐾较小的时候(2--10)还是可行的,但是如果𝐾较大,这么做也可能不会有明显地改善。 一般情况可能要试50到1000次。

 下面讨论如何选择K个集群数量,下图直观的认知中,选择两个或者四个都可以。

 但是如何决定到底选几个?没有所谓最好的选择聚类数的方法,通常是需要根据不同的问题,人工进行选择的。选 择的时候思考我们运用 K-均值算法聚类的动机是什么,然后选择能最好服务于该目的标聚 类数。当人们在讨论,选择聚类数目的方法时,有一个可能会谈及的方法叫作“肘部法则”。关 于“肘部法则”,我们所需要做的是改变𝐾值,也就是聚类类别数目的总数。我们用一个聚类 来运行 K 均值聚类方法。这就意味着,所有的数据都会分到一个聚类里,然后计算成本函数 或者计算畸变函数𝐽。𝐾代表聚类数字。

我们可能会得到一条类似于这样的曲线。像一个人的肘部。这就是“肘部法则”所做的, 让我们来看这样一个图,看起来就好像有一个很清楚的肘在那儿。好像人的手臂,如果你伸 出你的胳膊,那么这就是你的肩关节、肘关节、手。这就是“肘部法则”。你会发现这种模式, 它的畸变值会迅速下降,从 1 到 2,从 2 到 3 之后,你会在 3 的时候达到一个肘点。在此之 后,畸变值就下降的非常慢,看起来就像使用 3 个聚类来进行聚类是正确的,这是因为那个 点是曲线的肘点,畸变值下降得很快,𝐾 = 3之后就下降得很慢,那么我们就选𝐾 = 3。当你 应用“肘部法则”的时候,如果你得到了一个像上面这样的图,那么这将是一种用来选择聚类 个数的合理方法。

例如,我们的 T-恤制造例子中,我们要将用户按照身材聚类,我们可以分成 3 个尺 寸:𝑆, 𝑀, 𝐿,也可以分成 5 个尺寸𝑋𝑆, 𝑆, 𝑀, 𝐿, 𝑋𝐿,这样的选择是建立在回答“聚类后我们制造的 T-恤是否能较好地适合我们的客户”这个问题的基础上作出的。

 在别的一些trade-off例子中,还有图像压缩质量的好坏和图像大小的权衡,所以究竟选多少个聚类选择取决了具体需求。

11.2 非线性检测(异常检测 Anomaly Detection)

11.2.1 发现异常事件

在接下来的一系列视频中,我将向大家介绍异常检测(Anomaly detection)问题。这是机 器学习算法的一个常见应用。这种算法的一个有趣之处在于:它虽然主要用于非监督学习问 题,但从某些角度看,它又类似于一些监督学习问题。 什么是异常检测呢?举一个例子。

假想你是一个飞机引擎制造商,当你生产的飞机引擎从生产线上流出时,你需要进行 QA(质量控制测试),而作为这个测试的一部分,你测量了飞机引擎的一些特征变量,比如引擎运转时产生的热量,或者引擎的振动等等。

这样一来,你就有了一个数据集,从𝑥(1)到𝑥(𝑚),如果你生产了𝑚个引擎的话,你将这 些数据绘制成图表,看起来就是这个样子:

这里的每个点、每个叉,都是你的无标签数据。这样,异常检测问题可以定义如下:我们假设后来有一天,你有一个新的飞机引擎从生产线上流出,而你的新飞机引擎有特征变量𝑥𝑡𝑒𝑠𝑡。所谓的异常检测问题就是:我们希望知道这个新的飞机引擎是否有某种异常,或者说,我们希望判断这个引擎是否需要进一步测试。因为,如果它看起来像一个正常的引擎,那么我们可以直接将它运送到客户那里,而不需要进一步的测试。

有一种方法叫做密度监测。给定数据集 𝑥(1), 𝑥(2), . . , 𝑥(𝑚),我们假使数据集是正常的,我们希望知道新的数据 𝑥𝑡𝑒𝑠𝑡 是不是异常的,即这个测试数据不属于该组数据的几率如何。我们所构建的模型应该能根据该测试数据的位置告诉我们其属于一组数据的可能性 𝑝(𝑥)。

例如下面的图中,我们把监测数据按范围划分,使得每个部分的概率有其特定的概率,假设Xtest的概率小于某个特定概率\varepsilon,这代表这个检测值无法满足要求,因为大部分的检测值概率都比这个大。在蓝色圈内的数据属于该组数据的可能性较高,而越是偏远的数据,其属于该 组数据的可能性就越低。这种方法称为密度估计,表达如下:

欺诈检测:𝑥(𝑖) =用户的第𝑖个活动特征,模型𝑝(𝑥) 为我们其属于一组数据的可能性,通过𝑝(𝑥) < 𝜀检测非正常用户。

异常检测主要用来识别欺骗。例如在线采集而来的有关用户的数据,一个特征向量中可能会包含如:用户多久登录一次,访问过的页面,在论坛发布的帖子数量,甚至是打字速度 等。尝试根据这些特征构建一个模型,可以用这个模型来识别那些不符合该模式的用户。再一个例子是检测一个数据中心,特征可能包含:内存使用情况,被访问的磁盘数量, CPU 的负载,网络的通信量等。根据这些特征可以构建一个模型,用来判断某些计算机是不 是有可能出错了。

 

11.2.2 高斯正态分布 Gaussion Distribution

高斯分布,也称为正态分布,以下展示了概率密度函数,注意均值和方差。

以下举了几个高斯分布的例子。

注:机器学习中对于方差我们通常只除以𝑚而非统计学中的(𝑚 − 1)。这里顺便提一下, 在实际使用中,到底是选择使用1/𝑚还是1/(𝑚 − 1)其实区别很小,只要你有一个还算大的 训练集,在机器学习领域大部分人更习惯使用1/𝑚这个版本的公式。这两个版本的公式在理 论特性和数学特性上稍有不同,但是在实际使用中,他们的区别甚小,几乎可以忽略不计。 

 对于不同的位置,获得的概率不一样。

11.2.3 异常检测算法

 应用高斯分布开发异常检测算法。对于异常检测问题,一般来说有不止一个特征。所以我们要把所有特征对应的概率计算出来,再整体相乘

具体的步骤如下:

对于给定的数据集 𝑥(1), 𝑥(2), . . . , 𝑥(𝑚),我们要针对每一个特征计算 𝜇 和 𝜎2 的估计值。

一旦我们获得了平均值和方差的估计值,给定新的一个训练实例,根据模型计算 𝑝(𝑥)。 

当𝑝(𝑥) < 𝜀时,为异常。

下图是一个由两个特征的训练集,以及特征的分布情况,计算出每个特征的高斯分布,然后结合成一张三维图,表示的是密度估计函数,𝑧轴为根据两个特征的值所估计𝑝(𝑥)值:当\varepsilon = 0.03的时候,给出两个检测值,判断是否异常。

我们选择一个𝜀,将𝑝(𝑥) = 𝜀作为我们的判定边界,当𝑝(𝑥) > 𝜀时预测数据为正常数据, 否则为异常。

在这节中,我们介绍了如何拟合𝑝(𝑥),也就是 𝑥的概率值,以开发出一种异常检测算法。同时,在这节课中,我们也给出了通过给出的数据集拟合参数,进行参数估计,得到 参数 𝜇 和 𝜎,然后检测新的样本,确定新样本是否是异常。

11.2.4 开发和评估异常检测系统

如何选择\varepsilon?如何评估系统?本节将讨论这些话题。

实数评估的意思在于:改变特征或者别的参数(比如\varepsilon)会更容易评估模型变差或者变好。

异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量 𝑦 的值来告诉我 们数据是否真的是异常的。我们需要另一种方法来帮助检验算法是否有效。当我们开发一个 异常检测系统时,我们从带标记(异常或正常)的数据着手,我们从其中选择一部分正常数据用于构建训练集,然后用剩下的正常数据和异常数据混合的数据构成交叉检验集和测试集。

我们做个假设,假设已经有一些过去的监测数据,建立一组交叉验证集和测试集,并且这些集合里面包含了一些有缺陷的数据(y=1)。

例如:我们有 10000 台正常引擎的数据,有 20 台异常引擎的数据。 我们这样分配数 据:

6000 台正常引擎的数据作为训练集
2000 台正常引擎和 10 台异常引擎的数据作为交叉检验集
2000 台正常引擎和 10 台异常引擎的数据作为测试集


具体的评价方法如下:
1. 根据测试集数据,我们估计特征的平均值和方差并构建𝑝(𝑥)函数
2. 对交叉检验集,我们尝试使用不同的𝜀值作为阀值,并预测数据是否异常,根据 F1 值(可选视频)或者查准率与查全率的比例来选择 𝜀
3. 选出 𝜀 后,针对测试集进行预测,计算异常检验系统的𝐹1值,或者查准率与查全率之比。

下面的例子就是将全部数据分为三个部分,但是也有可能因为有缺陷数据太少导致无法划分出测试集,但是这种情况比较适合缺陷数据较少的情况。 

11.2.5 与监督学习对比

异常检测和监督学习的区别在于审视问题的方式不同,对于异常检测,未来的异常可能和现在的异常完全不一样,例如金融诈骗,每隔几个月总会出现新的诈骗方式;监督学习例如垃圾邮件分类问题,垃圾邮件总是很相似,例如诱导网站等等。

 之前我们构建的异常检测系统也使用了带标记的数据,与监督学习有些相似,下面的对比有助于选择采用监督学习还是异常检测:

 

希望这节课能让你明白一个学习问题的什么样的特征,能让你把这个问题当作是一个异常检测,或者是一个监督学习的问题。另外,对于很多技术公司可能会遇到的一些问题,通常来说,正样本的数量很少,甚至有时候是 0,也就是说,出现了太多没见过的不同的异常类型,那么对于这些问题,通常应该使用的算法就是异常检测算法。

11.2.6 选择什么样的特征

对于异常检测算法,我们使用的特征是至关重要的。在监督学习中,特征选择相比没有那么重要,因为可以选择忽略特征或者特征缩放等等。但是在异常检测中,没有任何label标记,想要提取出特征是比较困难的。

异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够 工作,但是最好还是将数据转换成高斯分布,例如使用对数函数:𝑥 = 𝑙𝑜𝑔(𝑥 + 𝑐),其中 𝑐 为非负常数; 或者 𝑥 = x^c,𝑐为 0-1 之间的一个分数,等方法。

一个常见的问题是一些异常的数据可能也会有较高的𝑝(𝑥)值,因而被算法认为是正常的。 这种情况下误差分析能够帮助我们,我们可以分析那些被算法错误预测为正常的数据,观察能否找出一些问题。我们可能能从问题中发现我们需要增加一些新的特征,增加这些新特征后获得的新算法能够帮助我们更好地进行异常检测。

异常检测误差分析:

 

我们通常可以通过将一些相关的特征进行组合,来获得一些新的更好的特征(异常数据 的该特征值异常地大或小),例如,在检测数据中心的计算机状况的例子中,我们可以用 CPU 负载与网络通信量的比例作为一个新的特征,如果该值异常地大,便有可能意味着该服务器是陷入了一些问题中。

在这段视频中,我们介绍了如何选择特征,以及对特征进行一些小小的转换,让数据更像正态分布,然后再把数据输入异常检测算法。同时也介绍了建立特征时,进行的误差分析 方法,来捕捉各种异常的可能。希望你通过这些方法,能够了解如何选择好的特征变量,从而帮助异常检测算法,捕捉到各种不同的异常情况。

11.3 推荐系统

十二、强化学习 Reinforcement Learning

12.1 什么是强化学习

12.1.1 强化学习和示例

 在控制直升机飞行的过程中,如果使用监督学习,例如设置一个状态x(高度和方向等),然后让有经验的飞行员来告诉一个正确的标签y,这种监督学习方法并不会有很好的效果,因为非常的状态本来就是模棱两可的。

所以我们采用强化学习的方式,其中最重要的是奖励机制Reward,强化学习的关键输入是奖励函数。并没有告诉对象如何去做(没有标签),而是通过设立奖励函数让它自动计算,取得进步(有点像训练动物,例如做了一些好的行为,就说是good dog,做了一些不好的事就说是bad good,对于直升机训练也是如此,做出好的飞行动作就是good,例如坠毁就是bad,指定奖励函数而不是直接给出最佳行为给了设计系统时更好的灵活性)。

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。

在强化学习框架中,我们将只提供我们的算法一个奖励函数,它指示学习代理何时做得好,当它做得不好。然后,学习算法的工作将是找出如何随时间选择行动,从而获得巨大的奖励。

例如机器狗的例子,训练的时候并没有给出放置腿部跨越障碍物的最佳方式,所有这些步骤都是机器狗自己计算出来的,只需给出奖励函数。

不需要使用复杂的机器狗和直升机训练,我们用一个火星探测器作为示例。初始探测器的位置在4,在位置1和6都有一个科学家想要获得的火星图像,但更想要获得1的图像,所以每个图像的奖励是不同的,此时设定探测器是往哪个方向走,由此可以获得不一样的奖励(可以选择不一样的方向或者向左向右方向混合)。

在每个时间阶段中,机器人都处于某种状态s,它可以选择一个动作,并从而得到奖励R(s),状态随动作变为s'。注意,奖励R(s)是与状态s相关,而不是下一个状态s'相关

强化学习四要素:状态、动作、奖励、下一个状态

12.1.2 强化学习的回报 Return

上一节说到探测器行走的方向可以有多种,那究竟哪种方案的奖励最好或者最差呢?

基于折扣系数(Discount Factor)和奖励值计算一套动作下来的总回报。折扣系数的作用就是让强化学习算法“不耐烦”,尽量少走几步结束。(更快获得奖励会获得更高的总回报值)

继续以探测器为例子,假设折扣系数为0.9,第一步是折扣系数的0次方也就是1,第二步是乘上折扣系数的1次方,以此类推,这是因为越早得到导致总回报的价值越高,这是根据系数来决定的(系数总是小于1),每次乘以自身会导致这次的回报比例降低。(另外一个例子是今天获得一美元的价值会比未来获得的一美元更多,因为当前可以通过存入银行等获得一美元的利息)

以下是获取回报的一些例子,每个起始位置规定它行走的方向,可以获得这个位置的return,当然不一定所有点都是从一个位置走,也可以有些往右,有些往左,获得的return是不一样的。

12.1.3 决策和马尔可夫过程

一些强化学习选择的策略。

1.总是往最近的奖励走

2.都往最大的奖励走

3.都往最小的奖励走(也是一种选择)

4.都往左走,除非有个最近的奖励在右边

其中一个重要的概念是Pi,Pi函数帮助我们在某种状态下选择哪种策略。

强化学习的目标就是找到这个Policy Pi。

 

举了机器人、直升机、象棋三种例子,但这种形式是一样的,叫作马尔可夫决策过程(Markov Decision Process, MDP),指未来仅取决于当前状态,而不取决于当前状态之前发生的任何事情

根据目标当前状态 s,基于策略选择动作a,世界或环境会发生变化,然后观察基于世界状态,目标的状态s及得到的奖励R。 

12.2 状态和贝尔曼方程

12.2.1 状态-动作价值函数

12.2.2 贝尔曼方程 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值