【无监督学习:聚类与异常检测】吴恩达机器学习笔记EP11(P101-P110)
从今天开始我将学习吴恩达教授的机器学习视频,下面是课程的连接1.1 欢迎来到机器学习!_哔哩哔哩_bilibili。一共有142个视频,争取都学习完成吧。
无监督学习、推荐系统和强化学习
下面是这门课最后会介绍的内容:
无监督学习里面的聚类和异常检测。
推荐系统
强化学习
什么是聚类
聚类在EP1中就介绍过。和监督学习那里不同的是,无监督学习的聚类训练的数据集中没有标签(答案),就是让模型自己寻找其中特征,并分类它们。
右图是一些聚类的应用。
k-means的直观理解
然后是聚类的k-means算法,主要就是不停做以下两件事:
1.给聚类质心赋点
2.移动聚类质心
先从第一步开始介绍。先随便选两个点作为质心,数据集中各个数据更靠近哪个质心就被归为哪一个类。
然后第二步就是计算当前类中所有点位置的平均,并将质心移动到这个平均位置上。
之后要做的就是不断重复1和2两个步骤,直到两个质心每次的变化都不大时,就算完成了分类。
k-means算法
下面时k-means算法的实现过程:
K是要分的总类个数。
首先就是计算数据与最近质心的差距,然后将质心移动到当前类数据平均位置。然后不断重复。
如果一个质心周围都没有对应类的数据,就说明这个类是不存在的或者说没有必要单独分一个类的,之间删除即可,总数K减一。
优化目标
k-means的优化目标。
先定义几个符号以便之后说明。
c(i)是聚类的索引,μk是聚类质心的位置。然后组合这两个符号以便之后的说明。
再接着是代价函数的定义(在聚类中也称为失真函数)。代价函数主要就是质心和每个数据位置距离之差的平方。
用代价函数J来指导训练,如果每一轮J减小很小,就可以选择停止。聚类中的代价函数J永远不应该上次,如果上升,就说明代码中有bug。
初始化k-means
然后是初始化k-means的介绍:
一开始的初始质心位置可以从数据集中随便抽取两个数据位置作为质心。
训练停下来的时候,也就是J减小幅度很小的时候,可能会出现很多种情况,如下图,最好的分类看起来一定是最上面的那个,下面的两种情况主要是J达到局部最小值。
尽可能减小J的方法就是多进行几次聚类,选择J最小的情况作为结果。
选择聚类的个数
聚类个数K是模棱两可的,像下面这样的数据集,不同的人可能会不同的类。
有一种肘点可以帮助自动选择K。
就是在这个elbow点之后的J下降幅度有限,所有就选择这个K。
但是更建议根据实际问题的理解,自行决定分类数量K。
发现异常事件
异常事件就是往数据集中添加一个新数据,让机器判断这个数据是否与数据集中其它数据类似。
看下面的图,越往外面的圈,里面是异常数据的可能性越大。
一般会设置一个阈值ε进行比较去判读是否为一个异常数据。
高斯(正态)分布
高斯分布也称正态分布。就是大部分数据分布在中间。
下面是高斯分布曲线的函数。里面的μ是平均数,可以决定曲线的中心;然后σ是标准差,可以决定曲线的宽度。
右图是μ和σ对曲线的影响。
下面是μ和σ的计算方法。
在图像中直观的可以看到异常数据的分布一般在高斯分布的两侧。
异常检测算法
最后是异常检测算法的概述:
先选择n个可能指向异常示例的特征xi
然后计算μ和σ2
加入要判断的数据,计算一个概率p(xi)
最后用一个ε来比较决定是否是异常数据。