Clustering
K-Means Algorithm
一种经典的聚类算法,步骤很简单,分4步:
1.首先随机选择K个聚类中心
2.对于Training Set中的每个点i,计算离i最近的中心c(i),将该点标记为c(i)
3.对于每个中心k,重新计算该位置为:所有标记为k的点的平均位置
4.如果所有中心的位置都不变,算法结束。否则回到步骤2
当在第2步时发现对于某中心没有属于的点,可以直接将该中心删除。如果必须维持K个中心的话,则可以重新随机选择该中心位置。
K-Means同样可以解决分离不明显的training set:
如右图所示。
Optimization Objective
之前的每个算法都有一个用来实施优化的公式(比如cost function),K-Means同样有,它的形式是:
这个函数又被称为distortion function。
如果画一个图像,x轴是k-means算法循环设置新中心的次数,y轴是J函数的值。如果k-means算法编写正确的话,这个图像应该是单调递减的。
Random Initialization
一种比较好的初始化方法是把初始的K个中心设置为随机K个不同的training set中的点。
但是当初始化的情况很差时,可能会陷入一个比较差的局部最优解,如图:
下面两个图就是陷入了局部最优解。
解决办法就是多次随机初始化,执行k-means后纪录distortion函数。
最终选择distortion函数值最小的分类方法作为答案。
Choosing the Number of Clusters
一种动态选择K值大小的方法是elbow method:
画出图像,x轴为K值大小,y轴为distortion值,这个值一定是单调递减的,如图:
如果图像是左边这种情况,那么K=3那个位置就很像一个elbow,这个位置就是最佳的K值。
但是如果是右边图像的情况就不能明确的找出elbow,因此这不是一个能应用于所有情况的方法。