您的位置:首页 > 其它

斯坦福机器学习公开课笔记(十)--聚类

2013-06-18 17:19 225 查看
公开课地址:https://class.coursera.org/ml-003/class/index

授课老师:Andrew Ng

1、unsupervised learning introduction(无监督学习简介)

之前提到的是机器学习两大分支中的一个--有监督学习,现在要该开始学习另一个分支--无监督学习。何为无监督学习?无监督学习和有监督学习又有什么区别?我觉得可以这样说,在有监督的学习中我们是知道样本的标记情况的,例如回归时我们只需要根据样本拟合出符合样本规律的曲线,分类时我们知道样本点的正负情况对其进行分类。无监督学习是针对无标记的样本,我们在不知道这些样本的情况的条件下去寻找这些样本中的一些隐含规律。显然,无监督学习我们并没有一个评价标准或依据,所以其要比有监督学习难。更具体的可以看:

http://en.wikipedia.org/wiki/Unsupervised_learning

http://en.wikipedia.org/wiki/Supervised_learning

和有监督学习一样,无监督学习在生活中也有广泛的应用,最常见的例子就是对网络上的人进行分组,用过新浪微博或twitter的人肯定都见过页面上不定期的给你推荐好友的情况,其实这些好友不是瞎推荐的,而且一些能和你兴趣爱好或学习工作经历相似能归为一组的人。在数据挖掘方面,个人觉得无监督学习要比有监督学习用的更多。下面是几个例子:



2、k-means algorithm(k均值算法)

在无监督学习中最有代表的就是聚类,而在聚类方法中,最常见的莫过于k-means算法,k-means的输入是k值(用来知道聚类的类别个数)和样本点。这里先给出k-means算法过程的直观表示:





从上面的聚类过程可以看到,这里的k是2,最终所有的样本点被聚到两个类别中,算法如下:



翻译:首先随机指定k个类的中心U1~Uk,然后迭代地更新该centroid。其中,C(i)表示第i个数据离那个类中心最近,也就是将其判定为属于那个类,然后将这k各类的中心分别更新为所有属于这个类的数据的平均值。

一般来说,k-means算法针对的是平面上容易进行分开的样本点,但是也存在下面这种特殊情况,也可以采用k-means来做:



3、optimization objective(优化目标)

即使是无监督学习,我们也存在一个代价函数,就比如这里的k-means算法,聚类的结果自然是希望相近的样本点聚在一起,上面我们已经定义了c和u,代价函数就可以求得,最小化所有数据与其聚类中心的欧氏距离和:



再次给出k-means算法的过程:



上图中第一个蓝框里面是固定中心点U,调整C的过程,第二个蓝框是调整U的过程,通过这两步实现了优化。

4、Random initialization(随机初始化)

在上面的k-means算法中,我们是随机选择k个点作为初始点,不过这种选择有时候效果并不好,就像下面这样:



从上图可以看到,都是三个初始点,但是如果位置给的不好就会出现聚类效果不佳的情况,例如右侧第二个图把下方聚为两类,而上方聚为一类,显然与我们直观感受不符。为此,我们应该进行多次的初始化,找到一个让代价函数最小的聚类结果:



5、choosing the number of clusters(选择聚类数目)

K-means尽管看起来简单实用,但是其存在一个最大的缺陷,那就是要提前指定好聚类的数目,也就是k值。现实情况是我们并不知道结果会怎样,提前指定k太难,只能一个个尝试。

一种尝试方法就是像下图那样尝试多个k,然后找到一个较大转折点的位置,这称为elbow method,也就是找一个类似于人的胳膊肘的地方。



但是如果连这样的地方也找不到呢?我们只能根据我们的要求指定数目了,例如针对下面对衣服进行聚类的,可以按照尺码的类别指定数目:



------------------------------------弱弱的分割线------------------------------------

这一讲是无监督学习的入门,介绍了聚类中最常见的k-means算法,内容并不算多。关于聚类问题,其实还有很多重要的内容没介绍,例如k-means的变种--k中心点算法,层次聚类这些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: