Clustering
K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。
典型的supervised learning:
有一组附标记y(i)的训练数据集,我们想要找到决策边界,区分开正(positive)或负(negative)标记数据。
Unsupervised learning:
我们面对的是一组无标记的训练数据集,数据之间不具有任何相关联的标记(即不具有y(i))。
在无监督学习中,我们将这些数据送入特定的算法,然后使用算法帮我们分析数据。上面图中是clustering(聚类)算法的简单示例,可以看出最终将训练数据分成了两类。
K-means algorithm
在聚类问题中,我们有未添加标签的数据,希望有一个算法能够自动地将这些数据分成有紧密关系的子集或是簇。
如上图所示,我们有不带标签的训练数据,希望能够将这些数据分为两个簇。
执行k-means算法,首先随机选择两个点,这两个点叫做聚类中心(cluster centroids),即途中红蓝叉号。
K-means是一个迭代的方法:
1、簇分配
2、移动聚类中心。
1、簇分配:
在k-means算法的每次循环中,第一步要进行簇分配,首先我们要遍历图中所有的点,根据当前点到红色或者是蓝色聚类中心的距离来分配属于哪个簇,与该聚类中心距离较近则属于该簇,最终将所有的数据点都分配至簇。如下图所示:
2、移动聚类中心:然后,计算每个簇中所有数据点的均值,将该簇的聚类中心移至均值处。
不断循环上述步骤,直至收敛(聚类中心不再变化):
聚类中心的计算公式如下:
下面看下K-means算法:
1、随机初始化K个聚类中心记作μ1, μ2,...,μk。
2、对于每个训练样本,使用c(i)来表示K个聚类中心中最接近x(i)的聚类中心的下标,这就是簇分配。
3、对于每个聚类中心,更新为该簇中所有数据点的均值处。
注意:如果存在一个没有分配点的簇类中心,通常在这种情况下我们就直接移除该聚类中心,那么最终将会得到K-1个簇。如果要求簇的数量必须是K个,那么我们要再重新随机寻找一个聚类中心来代替当前没有分配点的聚类中心。但是直接移除该聚类中心是更为常见的方法。
Optimization Objective
K-means算法要做的是找到参数c(i)和μi,即要找到最小化代价函数J的c和μ。该代价函数在K-means算法中有时也叫做失真代价函数(distortion cost function)。
Random Initialization
(1)K-means算法中首先要随机选择聚类中心,一般的方法是从样本中随机选取K个样本点作为聚类中心。
(2)由于初始化聚类中心的多样性,可能会导致K-means算法得到局部最优解。
(3)为了避免因为初始化导致的局部最优问题,我们可以:
·随机选择样本点;
·多次初始化聚类中心,然后计算K-means的代价函数,根据J的大小选择最优解。
Choosing the number of clusters
这个问题上没有一个非常标准的解答,或者能自动解决它的方法。 目前用来决定聚类数目的最常用的方法,仍然是通过看可视化的图或者看聚类算法的输出结果,或者其他一些东西来手动地决定聚类的数目。
《大数据——互联网大规模数据挖掘与分布式处理》中提到:给定一个合适的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升。
- 类簇的直径是指类簇内任意两点之间的最大距离。
-
类簇的半径是指类簇内所有点到类簇中心距离的最大值。