层次聚类,转自http://blog.sina.com.cn/s/blog_62f3c4ef01014uhe.html

Matlab提供系列函数用于聚类分析,归纳起来具体方法有如下:

方法一:直接聚类,利用clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄,不能更改距离的计算方法,该方法的使用者无需了解聚类的原理和过程,但是聚类效果受限制。

方法二:层次聚类,该方法较为灵活,需要进行细节了解聚类原理,具体需要进行如下过程处理:(1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离;(2)用 linkage函数定义变量之间的连接;(3)用 cophenetic函数评价聚类信息;(4)用cluster函数创建聚类。

方法三:划分聚类,包括K均值聚类和K中心聚类,同样需要系列步骤完成该过程,要求使用者对聚类原理和过程有较清晰的认识。

接下来介绍一下Matlab中的相关函数和相关聚类方法。

1.Matlab中相关函数介绍

1.1 pdist函数

调用格式:Y=pdist(X,’metric’)

说明:用 ‘metric’指定的方法计算 X 数据矩阵中对象之间的距离。

X:一个m×n的矩阵,它是由m个对象组成的数据集,每个对象的大小为n(即n个特征值)。

metric’取值如下:

‘euclidean’:欧氏距离(默认);‘seuclidean’:标准化欧氏距离;

‘mahalanobis’:马氏距离;‘cityblock’:布洛克距离;

‘minkowski’:明可夫斯基距离;‘cosine’:

‘correlation’:

‘jaccard’: ‘chebychev’:Chebychev距离。

1.2 squareform 函数

调用格式:Z=squareform(Y,..)
对于M个点的数据集X,pdist之后的Y将是具有M*(M-1)/2个元素的行向量。
Y这样的显示虽然节省了内存空间,但对用户来说不是很易懂,如果需要对这些距离进行特定操作的话,也不太好索引。MATLAB中可以用squareform把Y转换成方阵形式,方阵中<i,j>位置的数值就是X中第i和第j点之间的距离,显然这个方阵应该是个对角元素为0的对称阵。

1.3 linkage函数

调用格式:Z=linkage(Y,‘method’)

输入值说明:Y为pdist函数返回的M*(M-1)/2个元素的行向量,用‘method’参数指定的算法计算系统聚类树。

method:可取值如下:

‘single’:最短距离法(默认);

‘complete’:最长距离法;

‘average’:未加权平均距离法;

‘weighted’: 加权平均法;

‘centroid’:质心距离法;

‘median’:加权质心距离法;

‘ward’:内平方距离法(最小方差算法)

返回值说明:Z为一个包含聚类树信息的(m-1)×3的矩阵,其中前两列为索引标识,表示哪两个序号的样本可以聚为同一类,第三列为这两个样本之间的距离。另外,除了M个样本以外,对于每次新产生的类,依次用M+1、M+2、…来标识。

1.4 dendrogram函数

调用格式:[H,T,…]=dendrogram(Z,p,…)

说明:生成只有顶部p个节点的冰柱图(谱系图)。

为了表示Z矩阵,我们可以用更直观的聚类数来展示,方法为:dendrogram(Z),
产生的聚类数是一个n型树,最下边表示样本,然后一级一级往上聚类,最终成为最顶端的一类。纵轴高度代表距离列。

另外,还可以设置聚类数最下端的样本数,默认为30,可以根据修改dendrogram(Z,n)参数n来实现,1<n<M。dendrogram(Z,0)则表n=M的情况,显示所有叶节点。

1.5 cophenet函数

调用格式:c=cophenet(Z,Y)

说明:利用pdist函数生成的Y和linkage函数生成的Z计算cophenet相关系数。

cophene检验一定算法下产生的二叉聚类树和实际情况的相符程度,就是检测二叉聚类树中各元素间的距离和pdist计算产生的实际的距离之间有多大的相关性,另外也可以用inconsistent表示量化某个层次的聚类上的节点间的差异性。

1.6 cluster 函数

调用格式:T=cluster(Z,…)

说明:根据linkage函数的输出Z 创建分类。

1.7 clusterdata 函数

调用格式:T=clusterdata(X,…)

说明:根据数据创建分类。
 CLUSTERDATA Construct clusters from
data.
    T = CLUSTERDATA(X, CUTOFF) constructs clusters from
data X.
    X is a matrix of size M by N, treated as M
observations of N
    variables.  CUTOFF is a threshold for cutting the
hierarchical
    tree generated by LINKAGE into
clusters. When 0 < CUTOFF < 2,
    clusters are
formed when inconsistent values are greater than
    CUTOFF
(see INCONSISTENT). When CUTOFF is an integer and CUTOFF >=
2,
    then CUTOFF is considered as the maximum number of
clusters to
    keep in the hierarchical tree generated by
LINKAGE. The output T is
    a vector of size M containing
a cluster number for each observation.
 
   
When 0 < CUTOFF < 2, T = CLUSTERDATA(X,CUTOFF) is equivalent
to:
       Y = pdist(X,
‘euclid‘);
       Z = linkage(Y,
‘single‘);
       T = cluster(Z, ‘cutoff‘,
CUTOFF);
 
    When CUTOFF is an integer >= 2, T =
CLUSTERDATA(X,CUTOFF) is equivalent
   
to:
 
       Y =
pdist(X,‘euclid‘);
       Z =
linkage(Y,‘single‘);
       T =
cluster(Z,‘maxclust‘,CUTOFF)

1.8
Inconsistent
 INCONSISTENT Inconsistent values of a cluster
tree.
    Y = INCONSISTENT(Z) computes the inconsistent value of each non-leaf
    node in the hierarchical
cluster tree Z.  Z is a (M-1)-by-3 matrix
   
generated by the function LINKAGE.  Each inconsistent value is a
    measure of separation between
the two clusters whose merge is
    represented by that node,
compared to the separation between
    subclusters merged within
those clusters.
 
    Y = INCONSISTENT(Z,
DEPTH) computes inconsistent values by looking
    to a depth
DEPTH below each node.
 
    Y is a (M-1)-by-4 matrix, with
rows corresponding to each of the
    non-leaf nodes represented in
Z.  INCONSISTENT computes the
    inconsistent value for node
(M+i) using S_i, the set of nodes less than
    DEPTH branches below node
(M+i), excluding any leaf
nodes.
S_i是除了叶节点外,所有深度低于(M+i)不超过DEPTH的节点(包括M+i节点自身)
而Inconsistent计算的是S_i的距离的平均值。
 
Then
 
       Y(i,1) = mean(Z(S_i,3)),
the mean height of nodes in S_i
       Y(i,2) =
std(Z(S_i,3)), the standard deviation of node heights in
S_i
       Y(i,3) = length(S_i), the number of
nodes in S_i
       Y(i,4) = (Z(i,3) -
Y(i,1))/Y(i,2), the inconsistent value
 
    The
default value for DEPTH is
2.
计算深度会影响不一致系数的计算结果,计算深度比较大时,不一致系数的增量能反映出当前步引入的新样品与该类中心(涉及该类中所有样品)的距离远近,计算深度比较小时,不一致系数的增量仅能反映出当前步引入的新样品与上几步聚类中涉及的样品的中心的距离远近。

2. Matlab聚类程序的设计

2.1 方法一:一次聚类法(直接使用clusterdata函数)

X=[11978 12.5 93.5 31908;…;57500 67.6 238.0 15900];

T=clusterdata(X,0.9)
结果:

ans =

1
    
1
表明两个观测属于同一类。

再如下面的例子:
x1=randn(10,1);
x2=randn(10,1)+10;
x3=randn(10,1)+20;
x=[x1;x2;x3];
y=randn(30,1);
T=clusterdata([x,y],3)
temp1=find(T==1)
plot(x(temp1),y(temp1),‘rd‘,‘markersize‘,10,‘markerfacecolor‘,‘r‘)
hold
on
temp1=find(T==2)
plot(x(temp1),y(temp1),‘yd‘,‘markersize‘,10,‘markerfacecolor‘,‘y‘)
temp1=find(T==3)
plot(x(temp1),y(temp1),‘kd‘,‘markersize‘,10,‘markerfacecolor‘,‘k‘)
legend(‘cluster
1‘,‘cluster 2‘,‘cluster 3‘)
结果如下图:

2.2 方法二和方法三设计流程:分步聚类

Step1

用pdist函数计算相似矩阵,有多种方法可以计算距离,进行计算之前有时会先将数据用zscore函数进行标准化。

---------------------------------------------------------------------
 ZSCORE Standardized z
score.
    Z = ZSCORE(X) returns a centered, scaled version of
X, the same size as X.
    For vector input X, Z is the vector
of z-scores (X-MEAN(X)) ./ STD(X). For
    matrix X, z-scores
are computed using the mean and standard deviation
    along
each column of X.  For higher-dimensional arrays, z-scores
are
    computed using the mean and standard deviation along
the first
    non-singleton
dimension.
 
    The columns of Z have sample mean
zero and sample standard deviation one
    (unless a column of
X is constant, in which case that column of Z is
    constant
at
0).
---------------------------------------------------------------------
X2=zscore(X);

Y2=pdist(X2); %计算距离

Step2

Z2=linkage(Y2);

Step3

C2=cophenet(Z2,Y2); //0.94698

Step4 创建聚类,并作出谱系图

T=cluster(Z2,6);

MATLAB中提供了cophenet, inconsistent等表示相关性的函数。cophenet和inconsistent用来计算某些系数,前者用于检验一定算法下产生的二叉聚类树和实际情况的相符程度(就是检测二叉聚类树中各元素间的距离和pdist计算产生的实际的距离之间有多大的相关性),inconsistent则是量化某个层次的聚类上的节点间的差异性(可用于作为cluster的剪裁标准)。

时间: 2024-10-10 15:32:51

层次聚类,转自http://blog.sina.com.cn/s/blog_62f3c4ef01014uhe.html的相关文章

windows: Access denied for user &#39;root&#39;@&#39;localhost&#39; .....(转自新浪:http://blog.sina.com.cn/s/blog_40aff6390100jeke.html)

WINDOWS-XP 系统 mysql-5.1.22-noinstall-win32 提示:access denied for user 'root'@'localhost' using password yes 前几天都好好的,今天开机上来提示上面的这个错误,重启 MySQL 还是不可以. 在网上搜索了好久,总算找到详细的操作方法了.为了以后不再浪费时间,把她重新整理放到 Blog 里. 注意我这里的环境是 WINDOWS-XP 系统,LINUX 系统下的操作没有验证过,情况不清楚. 1. 管

MySQL存储过程详解 mysql 存储过程(转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html)

转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和

已发布13集网站开发技术视频:http://blog.sina.com.cn/s/blog_67d27f340102vf7l.html

已发布13集网站开发技术视频:http://blog.sina.com.cn/s/blog_67d27f340102vf7l.html

Matlab read_grib.r4 安装新方法(转自:http://blog.sina.com.cn/s/blog_9f36648b010179s7.html)

最近,打算用Matlab处理些GRIB格式的文件,需要在Matlab中添加read_grib.m文件,其实相当于是添加一个工具箱.read_grib.m的下载见:http://www.renci.org/~bblanton/files/ReadGrib/ 但是,要read_grib.m真正起作用,需要“安装”和“编译”两步. 按照网页上的说法,所谓安装,就是把下载下来的read_grib.r4.tar文件解压,然后将解压后的文件夹路径写到“startup.m”文件中.但是,我的Matlab201

matlab添加M_map工具箱(转 http://blog.sina.com.cn/s/blog_491b86bf0100srt9.html)

之前转载过matlab画世界地图的博文.最近正好用到.首先试了matlab自带的worldmap,感觉画出来的图形不尽如人意,比较杂乱.如下图. 略查阅了些资料,请教了Liangjing,一致推荐m_map.为了达到想要的效果,这次只要不再偷懒,下载M-Map工具箱(http://www.eos.ubc.ca/~rich/map.html)并进行安装.所幸过程比较顺利,现记录如下,回头把画出的效果图再添上.其他matlab的toolbox安装,也可参考进行. ------------------

C语言register关键字—最快的关键字 ---------------转自http://blog.sina.com.cn/s/blog_6a1837e90101128k.html

register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率.注意是尽可能,不是绝对.你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多register 变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你. 一.皇帝身边的小太监----寄存器 不知道什么是寄存器?那见过太监没有?没有?其实我也没有.没见过不要紧,见过就麻烦大了.^_^,大家都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝旁边的

c++中的srand()和rand() 转载 自:http://blog.sina.com.cn/s/blog_624c2c4001012f67.html

今天看了同事写的小程序,发现了其中出现了srand()和rand()这两个我以前没有用过的函数,当然从名字可以看出肯定能随机数有关,于是网查资料知这两个函数配合一起使用来产生随机数的,哈哈,又长知识了,现将这两个函数的使用贴过来,以备以后查看使用. 这两个帮助生成伪随机数的函数包含在标准库 中,所以首先需在头文件中包含进来. 注意:在C语言中包含在标准库中.    函数一:int   rand(void):     从srand   (seed)中指定的seed开始,返回一个[seed,   R

教你如何查看CAD文件是哪个版本的来自http://blog.sina.com.cn/s/blog_4c9fa4dd0101il1v.html

教你如何查看CAD文件是哪个版本的 http://blog.sina.com.cn/s/blog_4c9fa4dd0101il1v.html (2013-03-10 22:24:52) 转载▼ 标签: 教育 分类: AutoCAD实用技巧 在工作中会遇到打开一张图纸时出现“图形文件无效”的提示,大部都是因为用低版本软件打开了高版本的图纸.而又如何真正确认该文件是用哪个版本创建的,以下教大家一个辨别的方法.正常的DWG文件可以通过记事本或者其他文本软件打开,看开头几个字节就知道版本号了 Versi

转:C++中命名空间污染注意点 blog.sina.com.cn/s/blog_af68a2c201015pqo.html

一. 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突. 在 C语言中定义了3个层次的作用域,即文件(编译单元).函数和复合语句.C++又引入了类作用域,类是出现在文件内的.在不同的作用域中可以定义相同名字的变量,互不于扰,系统能够区别它们. 1.全局变量的作用域是整个程序,在同一作用域中不应有两个或多个同名的实体(enuty),包括变量.函数和类等. 例:如果在文件中定义了两个类,在这两个类中可以有同名的函数.在引用时,为了区