序
模仿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讲的比较详细吧。。