【吴恩达机器学习】第十四章 无监督学习
课时108 无监督学习
什么是无监督学习
监督学习是带有标签的,无监督学习没有标签。
无监督学习是要将一系列无标签的数据输入到算法中,然后让算法找到一些隐含在数据中的结构。
聚类
在聚类问题中,我们会给定一组未加标签的数据集,同时希望有一个算法能够自动将这些数据分成有紧密关系的子集或者是簇
聚类的用途
市场分割:数据库中有些顾客的信息,想把他们根据市场的不同进行分组
社交网络分析:找到关系密切的群体
组织计算机集群
了解银河系的构成
课时109 K-means算法
通过上一课时对聚类的定义,我们知道聚类问题需要有一个算法能将未加标签的数据分成有紧密关系的簇,K-means就是这样一个聚类算法。
K均值算法
1.输入
K均值算法接受两个输入,K(聚类出的簇的个数)和一系列无标签的数据集
2.
第一步: 随机初始化K个聚类中心,
第二步:进行内循环
第一个是簇分配,算出样本与k个聚类中心的距离,看样本与哪个聚类中心更近,然后将每个数据点分配给k个聚类中心之一。
用数学公式表示为 ,能够最小化这个式子的k值就是要赋值给的值,表示的是当前样本所指的那个簇的索引或序号
第二个是移动聚类中心,将k个聚类中心移动到其同簇点的均值处
如果存在一个没有点的聚类中心,最常见的做法是直接移除这个聚类中心,但这样就变成了K-1个簇而不是K个,如果一定需要K个簇则可以重新随机初始化这个聚类中心。
k均值算法的另一常见应用——解决分离不佳的簇
kmeans可以用来解决分离不佳的簇的问题,如下图看起来不是明显分离的三簇,但是我们需要通过这个数据来得到T-恤的SML三个号分别做多大,就可以通过k均值算法得到
课时110 K-means优化目标
K均值算法最小化的代价函数也就是优化目标如下:
也就是找到能够最小化代价函数J的和,这个代价函数又叫失真代价函数或K均值算法的失真
每个样本与此样本所属聚类中心的距离的平方值
上个课时讲的簇分配(k均值算法的第一步)其实就是最小化J关于变量c,先保持不变,选出来最小化代价函数J
移动聚类中心(k均值算法的第二步)其实就是最小化J关于变量,选择值来最小化J
课时111 随机初始化
这一节主要讲的是如何初始化K均值聚类算法,这样就可以使算法避开局部最优
初始化聚类中心的方法
首先K应该小于m
随机挑选K个训练样本作为聚类中心,即设定到为到
K均值算法可能会落到局部最优
如果随机初始化的不好,k均值算法可能会落到局部最优,如下图
多次初始化防止K均值算法落到局部最优
为了防止落到局部最优,我们可以进行多次初始化K均值算法,这样我们可以得到一个足够好的结果。
具体做法如下:
我们运行100次(由你而定,一般是50到1000次)K均值算法,最后得到100个聚类结果,然后在这所有100个分类数据的方法中找到代价最小的一个
如果k在2到10之间,多次随机初始化能保证我们找到局部最优解,但如果k比10大很多,多次随机初始化就不会有太大改善
课时112 选取聚类数量
目前没有非常好的方法选取聚类数量,现在最常用的方法还是通过观察可视化的图或者通过观察聚类算法的输出等。
因为是无监督学习,数据没有标签,所有并不总是有一个明确的答案。所以用自动化的办法来选择聚类的数量就很困难。
肘部法则
肘部法则是要改变K,如下图我们可以看到k=3之后代价函数J下降的很慢,所以K=3是一个拐点,看起来向人的肘部,所以我们选择K=3。
但是肘部法则并不常用,因为实际应用时得到的曲线很模糊,并找不到明显的肘部,如下图。
看哪个聚类数量能更好的应用于后续目的
如,我们也选择T-恤的size,是分SML三种号呢,还是分成XS S M L XL 五种号呢?也就是k=3还是k=5. 这样我们就可以从T恤的商业角度考虑,选择哪种能更好的满足顾客的需求。以此为依据来决定K值。