一、层次聚类
1 层次聚类的基本概念
层次聚类方法是古老而且常用的聚类方法。层次聚类方法又有两种产生层次聚类的基本方法。
- 凝聚的:该方法是自底向上的方法,初始每个对象看做一个簇,每一步合并最相近的簇,最终形成一个簇。
- 分类的:该方法是自顶向下的方法,从包含的所有点的簇开始,每一步分裂一个簇,知道仅剩下单点的簇。
本文主要关注凝聚的层次聚类方法。
2 簇之间的邻近性
在凝聚的层次聚类方法中,需要定义簇之间的相近性。有许多凝聚层次的聚类技术,本文中介绍单链、全链、组平均。
单链:
该方法中两个簇的邻近度定义为两个不同簇中任意两点之间的最短距离。单链技术擅长处理非椭圆形的簇,但是对噪音和离群点很敏感。
两个簇之间的相似度计算公式为:
dist({m1,m2},{m3,m4})=min(dist(m1,m3),dist(m1,m4),dist(m2,m3),dist(m2,m4))
全链:
该方法中两个簇的邻近度定义为两个不同簇中任意两点之间的最长距离。单链技术擅长处理圆形的簇,但是对噪音和离群点不太敏感。
两个簇之间的相似度计算公式为:
dist({m1,m2},{m3,m4})=max(dist(m1,m3),dist(m1,m4),dist(m2,m3),dist(m2,m4))
组平均:
该方法中两个簇的邻近度定义为两个不同簇中任意两点之间的平均距离。该方法是位于单链和全链之间的这种方法。
两个簇之间的相似度计算公式为:
dist({m1,m2},{m3,m4})=(dist(m1,m3)+dist(m1,m4)+dist(m2,m3)+dist(m2,m4))/4
二、Orange中的层次聚类
使用脚本
以iris数据为例
import Orange
#加载数据
data = Orange.data.Table("iris")
#层次聚类,其中默认采用组平均计算簇之间的相似度
root = Orange.clustering.hierarchical.clustering(data)
labels = [str(d.get_class()) for d in data]
#生成图像hclust-dendrogram.png
Orange.clustering.hierarchical.dendrogram_draw("hclust-dendrogram.png", root, labels=labels)
生成的图像如下:
使用可视化工具
Orange更强大的部分,还支持用控件的方式来进行数据挖掘,同上例的可视化挖掘方法如下:
同样输出的结果如下:
无论是用代码,还是用可视化的方式都可以对参数进行精确的控制。
三、参考资料
数据挖掘导论 http://book.douban.com/subject/5377669/