k均值是基于划分的聚类技术,其特征为聚类的结果趋向于类球形,而k值就是需要发现的k个类,一般由使用者指定。
k-means
k均值通常用于n维连续空间(数值类型)中的数据,其算法思想比较简单:
选择k个初始质心,然后将样本中的每个点指派到最近的质心,指派的方法一般是计算距离,以每个质心和所属他的点为一个簇,重新计算出该簇的质心,重复下去,直到簇不变(也可以是质心不变)
该算法思想有两大需要解决的问题:
1. k的大小该如何选择
2. k个初始点该如何选择
k的大小无疑会影响聚类的效果,并且k的位置选择不好会导致局部局部最小,如下图:
上述两个问题将在最后介绍解决方法。
层次聚类
一般我们说的层次聚类包含两种方法:凝聚层次聚类,分裂层次聚类。
区别在于,前者从每个点作为一个簇开始,每次合并两个簇,后者相反。
从方法上来说,凝聚层次聚类一开始就又n个簇,每个簇是一个点,每次聚类都减小一个簇。
这意味着,簇的个数从0到n(对比k-means,肯定包含k在内)。
和k-means一样,层次聚类也面临着合并指标的选取,一般来说有如下选取指标:
- min:两个簇中最近点之间的距离
- max:两个簇中最远点之间的距离
- 组平均:两个簇的点之间的距离的平均值
- 质心:两个簇的质心的距离
簇评估
关于聚类,有一个问题尤为重要,即簇评估。
类似软件开发中的标准,对于簇的好坏评价,同样我们遵从:高内聚低耦合。
我们希望一个簇内的点的相似性尽可能大,而簇之间的相似性尽可能小。
这里的相似性,我们可以使用简单的距离来表示。
于是就有如下指标: