关于聚类

1 聚类的类型

     聚类可以通过人工神经网络来实现,也可以通过专门的聚类算法实现,例如参考资料[3]介绍了较为常见的k-means、层次聚类、SOM以及FCM四种聚类算法,其中SOM属于神经网络方法。本文重点介绍层次聚类算法

    参考资料[3]提到,根据层次分解的顺序是自底向上的还是自上向下的,层次聚类算法又可分为凝聚的层次聚类算法分裂的层次聚类算法,本文主要介绍前者。

2 凝聚层次聚类算法

    参考资料[9]解析了凝聚层次聚类的含义:所谓凝聚的,指的是该算法初始时,将每个点作为一个簇,每一步合并两个最接近的簇。例如:依次取当前最近的点对,如果这个点对当前不在一个簇中,则将这两个点所在的两个簇合并。另外即使到最后,对于噪音点或是离群点也往往还是各占一簇的,除非过度合并。对于这里的"最接近",有下面三种定义:

    (1)单链(MIN):定义簇的邻近度为不同两个簇的两个最近的点之间的距离。
    (2)全链(MAX):定义簇的邻近度为不同两个簇的两个最远的点之间的距离。
    (3)组平均:定义簇的邻近度为取自两个不同簇的所有点对邻近度的平均值。

    参考资料[3]对凝聚型层次聚类的策略也作了类似的介绍:先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有对象都在一个簇中,或者某个终结条件被满足。绝大多数层次聚类属于凝聚型层次聚类,它们只是在簇间相似度的定义上有所不同。四种广泛采用的簇间距离度量方法如下:

关于聚类_第1张图片

    参考资料[3]给出采用最小距离的凝聚层次聚类算法流程:

 (1) 将每个对象看作一类,计算两两之间的最小距离;
 (2) 将距离最小的两个类合并成一个新类;
 (3) 重新计算新类所有类之间的距离;
 (4) 重复(2)、(3),直到所有类最后合并成一类。

3 凝聚层次聚类的matlab实现

    参考资料[8]介绍了matlab中实现凝聚层次聚类的两种方法:a)一次聚类;b)分步聚类。本文重点介绍后者。

3.1 使用pdist计算变量之间的距离

    关于pdist,matlab帮助文档的解析如下:

pdist
Pairwise distance between pairs of objects
Syntax
D = pdist(X)
D = pdist(X,distance)
D = pdist(X) computes the Euclidean distance between pairs of objects in m-by-n data matrix X. 
Rows of X correspond to observations, and columns correspond to variables. 
D is a row vector of length m(m–1)/2,corresponding to pairs of observations in X.
    根据上述的解析可知,pdist主要的作用是计算X矩阵中行与行之间的距离。

3.2 用linkage函数来产生聚类树

    matlab帮助文档中对linkage的解析如下:

linkage
Agglomerative hierarchical cluster tree
Syntax
Z = linkage(X)
Z = linkage(X,method)

Description
Z = linkage(X) returns a matrix Z that encodes a tree of hierarchical clusters of the rows of the real matrix X.
Z = linkage(X,method) creates the tree using the specified method, where method describes how to measure the distance between clusters.

    实例

clear
clc
X = [1
     2
     3];
Y = pdist(X, 'euclidean');
Z = linkage(Y, 'average');
dendrogram(Z);
   运算结果如下

Y = [1  2  1]
Z =  [2	   3	1
      1	   4	1.5]

    解析:Y的三个值分别为X(1)vsX(2),X(1)vsX(3)以及X(2:)vsX(3)。

                Z的第1行表示X(2)与X(3)的距离为1,聚为一类,新一类命名为4;

                Z的第2行表示X(1)与新产生的类4的距离为1.5,聚为一类(其距离其实是X(1)vsX(2)的距离1和X(1)vsX(3)的距离2的平均值)。

    dendrogram将层次聚类树画为如下图:

关于聚类_第2张图片

3.3 用 cluster进行聚类,返回聚类列

    matlab帮助文档中关于cluster的说明如下

cluster
Construct agglomerative clusters from linkages
Syntax
T = cluster(Z,'cutoff',c)
T = cluster(Z,'cutoff',c,'depth',d)
T = cluster(Z,'cutoff',c,'criterion',criterion)
T = cluster(Z,'maxclust',n)

Description
T = cluster(Z,'cutoff',c) constructs clusters from the agglomerative hierarchical cluster tree, Z,
as generated by the linkage function. Z is a matrix of size (m – 1)-by-3, where m is the number of observations in the original data. c is
a threshold for cutting Z into clusters. Clusters are formed when a node and all of its subnodes have inconsistent value less than c.
All leaves at or below the node are grouped into a cluster. t is a vector of size m containing the cluster assignments
of each observation.If c is a vector, T is a matrix of cluster assignments with one column per cutoff value.T = cluster(Z,'cutoff',c,'depth',d) evaluates
inconsistent values by looking to a depth d below
each node. The default depth is 2.
T = cluster(Z,'cutoff',c,'criterion',criterion) uses the specified criterion for forming clusters, where criterion is
one of the strings 'inconsistent' (default) or 'distance'.The 'distance' criterion uses the distance between
the two subnodes merged at a node to measure node height. All leaves at or below a node with height less than c are
grouped into a cluster.
T = cluster(Z,'maxclust',n) constructs a maximum of n clusters using  the 'distance' criterion. cluster finds
the smallest height at which a horizontal cut through the tree leaves n or fewer clusters.If n is a vector, T is
a matrix of cluster assignments with one column per maximum value.

    实例

    在上面的实例的基础上,利用cluster对Z进行构建

T = cluster(Z, 2);
    上面的命令意思为:将Z进行归类,类别最大为2。结果如下

T=[1

      2

      2];

    也就是说,X(1)是一类,X(2)和X(3)归为一类。

参考资料

[1]聚类

[2]一种改进的凝聚层次聚类法

[3]四种聚类方法之比较

[4]基于凝聚的层次聚类算法的改进

[5]用MATLAB做聚类分析

[6]用matlab做聚类分析

[7]matlab聚类分析

[8]用matlab做聚类分析 

[9]初识聚类算法:K均值、凝聚层次聚类和DBSCAN

你可能感兴趣的:(关于聚类)