1、数据准备 2、聚类原理 聚类分析中的“类”(cluster)和前面分类的“类”(class)是不同的,对cluster更加准确的翻译应该是“簇”。聚类的任务是把所有的实例分配到若干的簇,使得同一个簇的实例聚集在一个簇中心的周围,它们之间距离的比较近;而不同簇实例之间的距离比较远。对于由数值型属性刻画的实例来说,这个距离通常指欧氏距离。 现在我们对前面的“bank data”作聚类分析,使用最常见的K均值(K-means)算法。下面我们简单描述一下K均值聚类的步骤: 1)K均值算法首先随机的指定K个簇中心; 2)将每个实例分配到距它最近的簇中心,得到K个簇; 3)分别计算各簇中所有实例的均值,把它们作为各簇新的簇中心。 4)重复1)和2),直到K个簇中心的位置都固定,簇的分配也固定。 上述K均值算法只能处理数值型的属性,遇到分类型的属性时要把它变为若干个取值0和1的属性。WEKA将自动实施这个分类型到数值型的变换,而且WEKA会自动对数值型的数据作标准化。这样得到的数据文件为“bank.arff”,含600条实例。
3、实现步骤 (1)用“Explorer”打开刚才得到的“bank.arff”(600条实例数据)。



(2)切换到“Cluster”, 点击“Choose”按钮选择“SimpleKMeans”,这是WEKA中实现K均值的算法。

(3)点击旁边的文本框,修改“numClusters”为6,说明我们希望把这600条实例聚成6类,即K=6;下面的“seed”参数是要设置一个随机种子 ,依此产生一个随机数 ,用来得到K均值算法中第一次给出的K个簇中心的位置。我们不妨暂时让它就为10,点击OK。

(4)选中“Cluster Mode”的“Use training set”(使用训练集),选择“Store clusters for visualization”(存储聚类可视化),点击“Start”按钮。

(5)观察右边“Clusterer output”给出的聚类结果。也可以在左下角“Result list”中这次产生的结果上点右键,“View in separate window”在新窗口中浏览结果。


3、结果分析 (1)首先我们注意到结果中有这么一行(误差平方和): Within cluster sum of squared errors: 1604.7416693522332 这是评价聚类好坏的标准,数值越小说明 同一簇 实例之间的距离越小。

实际上如果把“seed”参数改一下,得到的这个数值就可能会不一样,例如将“seed”取200,就得到 : Within cluster sum of squared errors: 1555.6241507629218

(也许实际得到的值不一样)应该取后面这个,当然再尝试几个seed,这个数值可能会更小(该数值越小,说明同一簇实例直接的距离越小,聚类的结果也就越好。多次试验,找到该值趋于最小的值(实例容量越大,越难找),即得到了本次实验最好的方案结果) 。
(2)接下来“Cluster centroids:”之后列出了各个簇中心的位置。对于数值型的属性,簇中心就是它的均值(Mean);分类型的就是它的众数(Mode), 也就是说这个属性上取值为众数值的实例最多。对于数值型的属性,还给出了它在各个簇里的标准差(Std Devs)。

(3)最后的“ Clustered Instances”是各个簇中实例的数目及百分比。

(4)为了观察可视化的聚类结果,我们在左下方“Result list”列出的结果上右击,点“ Visualize cluster assignments”。

弹出的窗口给出了 各实例的散点图。最上方的两个框是选择横坐标和纵坐标,第二行的“color”是散点图着色的依据,默认是根据不同的簇“Cluster”给实例标上不同的颜色。可以在这里点“Save”把聚类结果保存成ARFF文件。


在这个新的ARFF文件中,“instance_number”属性表示某实例的编号,“Cluster”属性表示聚类算法给出的该实例所在的簇。
