前面的文章里总共提到了7种聚类算法,我们就会情不自禁地想知道,哪一种是“最好”的聚类算法?
正如我在一开始就提到,聚类实际上是由用户来给定规则,从而实现分类的。所以所谓“最好”的聚类算法,就应该是那个聚类规则“最能反映系统特征”的算法(当然,在同样能反映系统特征的情况下,效率越高自然越好,比如AP算法就要优于K-centers算法)。
在聚类算法中,最为关键的规则是什么呢?我个人认为,应该就是对样品相似性的描述。这不仅仅是指两两样品之间的直接相似度(也就是相似矩阵),还有如“A与B接近,B与C接近,那么A与C是否接近”这样的传递性问题。比如在K-means里面,这个问题就是否定的,K-means只认样品两两间的直接相似性(欧氏距离),而在Chameleon算法和谱聚类里,这种相似性就可以通过网络进行传递。因此K-means得到的就只能是凸型的聚类,而后两者则可以得到形状各异的聚类。但是,这样的相似性真的是我们需要的么?这就要根据实际的问题来判断了。所以算法的优劣归根到底要根据问题本身来判断。
最后比较一下之前提到的所以算法的特点
算法 | 计算效率 | cluster形状 | cluster数目选取 | 模型参数 |
---|---|---|---|---|
average-linkage | 中等 | 凸型 | 一般 | 无 |
K-means | K-means | 接近大小的凸型 | 敏感 | 无 |
谱聚类 | 高 | 任意形状 | 不敏感 | 本征矢数目,不敏感 |
Chameleon | 中等 | 任意形状 | 不敏感 | RI和RC的相对权重,敏感 |
PCCA | 高 | 任意形状 | 自动判断 | 无 |
SOM | 中上 | 接近大小的凸型 | 一般 | 没有测试,估计不太敏感 |
Affinity Propagation | 低 | 任意形状 | 敏感 | 敏感 |