Hierarchical Clustering 理解

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

你可能感兴趣的:(Matlab)