Unsupervised learning
introduction
前面说的都是有监督学习(Supervised learning),是指训练数据每一笔都是成对的(x1,y1),(x2,y2)……就好像我们备考的时候,做习题题目和答案都提供给你。而machine learning中是指提供的数据有贴标签,输出的值贴上了答案。
现在要说的无监督学习(Unsupervised learning)是训练的时候就只给你题目,没给你答案,根据题目看看能学到什么东西。即machine learning的训练数据只有x1,x2……
如果Unsupervised learning用来做分类问题的话,就如同在Andrew的week1中提到的,情形类似于:给你一堆的水果,也没跟你说是什么。你看着这些水果,把它们聚成几类。然后再给你几个水果的时候,你找到它们所属类别。
(图片来自网络)
这里出现的问题就是你不知道聚成几类,比如橙子,柠檬,芦柑,橘子,有可能你会归成一类或两类三类。因为没有给你答案,你聚完类之后,要用这个模型去测试新数据。
无监督学习的应用:
(1)市场分类
(2)社交网络分析
(3)天文数据的分析
K-means算法
接下来就介绍一些无监督学习的算法
首先是K-means算法,它允许数据没有贴标签,然后把数据聚成k个不同的类。K-means算法是一个迭代算法,它的思想就是:
| 这是要分类的点,这个例子k=2,即要将这些点分成两类 |
| 先随机选两个点作为两类的临时中心,如图,选了红色和蓝色的两个点。
|
| 分别算出剩余的每一个点与这两个中心点的距离。把它归为距离最近的中心点那一类。 |
| 这一轮就进行了一次聚类,把点分为了两堆。接着分别求出两堆点的中心。 |
| 这个中心有可能不是那堆点中的一个点了,数值上求出了这样的一个值。 |
| 根据新求出的两类中心,再对所有的点求到两类中心的距离,将其归为距离最近的中心那类 |
| 这样一轮,将点重新分成了两堆 |
| 再算出两堆点的中心位置 |
| 如果中心点变化不大,就说明聚类完成了。 |
从上面的思路分析来看,k-means算法最重要的两个值就是中心点位置和距离了。
输入:
算法
中心点μk,表示点i和最近中心点的距离。
优化目标
K-means要优化的目标是所有点离它最近的中心点的欧式距离之和。
这个函数也称为畸变函数(distortion function)。K-means的目标是求出J最小的一组中心点μk和最近距离,如果目前的中心点没有使J最小呢?看算法部分,首先会固定每个类的中心点,调整所属的类来使J达到最小;接着,都归好类,调整中心点位置来使J达到最小。
为什么最后J可以求到最小值呢?J是距离的平均,从距离上看,在数据分布上,类似的点靠的比较近。我们求一个点到各个中心点的距离,然后比较它离哪个中心点最近,就是在看它和哪个类最类似。而更新中心点的位置,实际就是求这个类所有点在空间分布的平均位置,而这个类中的点都是环绕在这个中心点四周簇成一团。这两个步骤分别都是在迭代算使J最小的和μk,所以J总是减小的。
初始化
K-means算法在开始的时候,我们要随机选k个点作为中心点。因为畸变函数是非凸函数,所以,不能保证最后的结果能得到全局最优,这意味着k-means对初始化选点很敏感,选的好有可能得到全局最优,否则就只能得到局部最优解。但是,一般很难得到全局最优解。如果你对得到的局部最优解不满意,那可以多做几次k-means,每次尝试不一样的初始点,选其中J最小的和μk做输出。
K的大小
K是我们猜测的分类数,它的大小其实没有严格规定,我们可以根据不同k值得到的最小J来选k。如下图,k=3的时候就差不多得到比较小的J了,可以选k=3。而k=2,J比较大,所以减小k不明智;k=4,J变化不太大了,所以没必要增加k。
实践时选k,够用就好,比如坐T-恤分类,你可以分成s-m-l三类,也可以分成xs-s-m-l-xl五类,看哪种情况能满足更多顾客需求。