(一)、K-Means聚类算法
KMeans是聚类算法的一种,先来直观的看一下该算法是怎样聚类的。给定一组数据如下图所示,K-Means算法的聚类流程如图:
图中显示了Kmeans聚类过程,给定一组输入数据{x(1),x(2),...,x(n)}和预分类数k,算法如下:
首先随机指定k个类的中心U1~Uk,然后迭代地更新该centroid。
其中,C(i)表示第i个数据离那个类中心最近,也就是将其判定为属于那个类,然后将这k各类的中心分别更新为所有属于这个类的数据的平均值。
(二)、Cluster问题的(distortion)costfunction
在supervised learning中我们曾讲过cost function,类似的,在K-means算法中同样有cost function,我们有时称其为distortion cost function.如下图所示,J(C,U)就是我们要minimize的function.
即最小化所有数据与其聚类中心的欧氏距离和。
再看上一节中我们讲过的KMeans算法流程,第一步为固定类中心U,优化C的过程:
第二步为优化U的过程:
这样进行迭代,就可以完成cost function J的优化。
练习:
这里大家注意,回归问题中有可能因为学习率设置过大产生随着迭代次数增加,cost function反倒增大的情况。但聚类是不会产生这样的问题的,因为每一次聚类都保证了使J下降,且无学习率做参数。
(三)、如何选择初始化时的类中心
在上面的kmeans算法中,我们提到可以用randomly的方法选择类中心,然而有时效果并不是非常好,如下图所示:
图1
对于上图的这样一组数据,如果我们幸运地初始化类中心如图2,
图2
图3
(四)、聚类个数的选择
How to choose the number of clusters? 这应该是聚类问题中一个头疼的part,比如K-Means算法中K的选择。本节就来解决这个问题。
最著名的一个方法就是elbow-method,做图k-J(cost function)如下:
若做出的图如上面左图所示,那么我们就找图中的elbow位置作为k的选定值,如果像右图所示并无明显的elbow点呢,大概就是下图所示的数据分布:
这种情况下需要我们根据自己的需求来进行聚类,比如Tshirt的size,可以聚成{L,M,S}三类,也可以分为{XL,L,M,S,XS}5类。需要大家具体情况具体分析了~
练习:
练习: