Week8-1: Clustering

模仿coursera的结构,把第八周分成两部分。前面七周学习内容,我们经常用到训练这个词,就像妈妈教小孩子说话一样,是属于监督学习,数据集是有标记的,这样我们才能根据 $x$ 来预测 $y$。

对于无监督学习,给出的数据集是无标记的,可以看成只给了 $x$,而没有给出 $y$ 。

K-means 聚类算法

监督学习中,我们学到了分类,相对应的,无监督学习中有聚类的概念。

假设现有两个特征的数据集,把它们画在坐标系中如下图,直观上觉得它们应该可以分成2类数据,右上角部分和左下角部分,K-means算法就是干这个事的,它接受两个参数$ (X, K) $ K表示要将数据分成几类,$X$ 表示数据集。

那么K-means算法是怎么工作的呢?

K-means算法工作流程

随机选取K个中心点

假设需要将数据分成2类,那么它会先随机的选取2个中心点,然后将数据集按照靠哪个点比较近而分成了两类。

计算新的中心点

接着计算每一类的新中心点,也就是点 $\frac 1 m (x^{(1)}+.. + x^{(n)})$

这样迭代的计算新中心点,直到中心点稳定后,K-means算法就完成工作了

代价函数

K-means的代价函数是指每一类里的点到中心点的距离之和

K-means 算法优化

从数据集中选取中心点

算法初始时需要随机选取中心点,如果要是选了一个偏离数据很远的中心点,那就会造成一次分类后,这个中心点周围没有任何数据,会陷入局部最优。

所以我们可以在初始时,从数据中选取K个点作为初始的中心点。

多次运行算法

初始中心点对K-means的影响非常大,如果初始点选的不好,很可能陷入局部最优。

而应对这一问题的方法是多次运行K-means算法,优化它的失真值(Cost Function)。

选择K值

首先这是一个模棱两可的问题,没有标准答案或方法可以告诉你到底应该分成几类。

人也许一眼能看出来数据可以分成几类,但是总有一些情况是连人眼的分不出来的。

例如衣服的尺码可以分成S,M,L三类,也可以分成XS,S,M,L,XL五类,而到底分成几类,按照你的业务需求定。

还有一种方式是利用肘算法,也就是尝试不同的K值,每次分类完成后都计算它的Cost Function。

左图容易看出来,选K=3就行,形象点也就是手肘的那个点,而对于有图,似乎就看不出肘在哪了。。。

总结

看到目前为止,K-means算法印象最深刻。。也许是因为Ng讲的比较详细吧。。

坚持原创文章分享,您的支持将鼓励我继续创作!