在之前的文章里,讨论了一些聚类算法的基本思路,并针对人为构造的数据进行了测试。然而,真实的数据毕竟不同于人工数据。在对现实数据进行聚类的时候,有时候不知道哪些特征才是最关键的,因此多少会掺杂一些无关的特征,这样,就会“稀释”不同类别之间的差别。所以,这些聚类算法最后还要针对真实的数据集做一个测试。
这里我采用的是已知分类的几个数据集wine,ecoli和breast-cancer-wisconsin,这样可以较方便地检验聚类的结果。一个合理的聚类结果,当然应该反映出数据的自然类别,也就是得到的cluster跟分类一致性要高。
具体的测试结果就不贴上来了,就说说几种算法的大致表现。
层次聚类:聚类结果比较平庸,总是能反映出一些真实分类,但又总是不太理想
K-means:出人意料,这样一个往往被作为baseline的算法,其聚类结果都与真实分类比较吻合,是表现最好的算法之一
Chameleon:在调节RI和RC的比例参数后可以得到还可以接受的结果
谱聚类:这个在之前的测试里挺不错的算法,这里却表现欠佳,往往要设定较多的类别数才能反映出真实的分类,不过聚类结果尚可
PCCA:另外一个表现最好的算法,类似于K-means
SOM:结果十分不稳定,每次收敛都不同,看来最简单的SOM不是太适合用于clustering
AP:如前所述,AP跟K系列的算法目标相接近,所以结果也类似,不过可以用于只有距离矩阵的情况
总体而言,对于这些测试数据,PCCA~K-means~AP > 谱聚类~Chameleon > 层次聚类