Hierarchical Clustering 算法又简称HAC分类算法。
这个算法其实很简单,与Kmeans相比,甚至没有自己的目标函数。
HAC算法有两个思路:
从上往下,和从下往上。什么意思呢?
从上往下就是我们起初先吧所有的数据看做是一个类,然后慢慢的分解,就是先分成2个类,在三个类,最后,每个元素都是一个类,最终生成一个树的结构。
从下往上就正好相反,起初每个元素是一个类,然后一步步向上,指导所有的元素都分到了一个类为止。
具体怎么分类,方法就比较多了,大家这里其实可以看出来,这个分类的方法是计算相似度。
类中有一个元素的时候,也就是我们说的最低层,每个元素是一个类的时候,我们可以计算元素的相似度。
当每个类中有好多元素的时候,方法就比较多了,我们可以计算集合中最近的两个点作为两个集合的距离。
也可以取两个集合中距离最远的两个点作为两个集合的距离。
还可以将两个集合中的两两距离加权区平均,得到加权后的值,作为两个类的距离。
然后可以用最近邻或者贪心去一层一层的去分类,直到结束。
至于算法的复杂度,这个主要是看你在不在乎了。
http://isilic.iteye.com/blog/1825902
上面的博客中讲了算法复杂度的问题,有兴趣的同学可以看看。
这里给出一个HAC算法的matlab程序:
%HAC clustering
%JSON_nie
x = rand(5,10);
y = pdist(x);
z = linkage(y);
dendrogram(z); %show the z as the tree style
t = cluster(z,'maxclust',3);
这里用了matlab中的cluster的toolbox,所以代码很简单。首先我们用pdist去计算元素间 的相似度,或者是距离,然后linkage可以生成tree的形式
dendrogram可以可视化tree的形式。
最后我们用cluster去得到最后的分类结果。这里3是我们指定的最的大分类数。
参考:http://www.mathworks.cn/cn/help/stats/hierarchical-clustering.html