原文地址http://blog.sina.com.cn/s/blog_62186b460101ard2.html
这里只是将比较重要的部分转一下
另外还有一篇关于层次聚类的 http://blog.csdn.net/jwh_bupt/article/details/7685809
聚类分析就仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组(簇)。其目标是,组内的对象相互之间是相似的,而不同组中的对象是不同的。组内相似性越大,组间差别越大,聚类就越好。
先介绍下聚类的不同类型,通常有以下几种:
(1)层次的与划分的:如果允许簇具有子簇,则我们得到一个层次聚类。层次聚类是嵌套簇的集族,组织成一棵树。划分聚类简单地将数据对象划分成不重叠的子集(簇),使得每个数据对象恰在一个子集中。
(2)互斥的、重叠的与模糊的:互斥的指每个对象都指派到单个簇。重叠的或是模糊聚类用来反映一个对象同时属于多个组的事实。在模糊聚类中,每个数据对象以一个0和1之间的隶属权值属于每个簇。每个对象与各个簇的隶属权值之和往往是1。
(3)完全的与部分的:完全聚类将每个对象指派到一个簇中。部分聚类中,某些对象可能不属于任何组,比如一些噪音对象。
...
基本K均值
根据该算法,实现如下代码:
https://github.com/intergret/snippet/blob/master/Kmeans.py
或是 http://www.oschina.net/code/snippet_176897_14731
凝聚层次聚类
根据该算法,实现如下代码。开始时计算每个点对的距离,并按距离降序依次合并。另外为了防止过度合并,定义的退出条件是90%的簇被合并,即当前簇数是初始簇数的10%:
https://github.com/intergret/snippet/blob/master/HAC.py
或是 http://www.oschina.net/code/snippet_176897_14732
DBSCAN:
根据该算法,实现如下代码:
https://github.com/intergret/snippet/blob/master/Dbscan.py
或是 http://www.oschina.net/code/snippet_176897_14734
算法实现
http://www.blogjava.net/changedi/archive/2010/03/19/315963.html