一、理论

聚类就是把东西聚在一起,那一定有一定的规则,相似等,后面会给出。聚类与分类的不同就是,聚类所要求的划分的类是未知的。聚类是这么定义的:将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇之间的对象很大的相异性。按照个体或样品(individuals, objects or subjects)的特征将它们分类,使同一类别内的个体具有尽可能高的同质性(homogeneity),而类别之间则应具有尽可能高的异质性(heterogeneity)。

传统的聚类有:系统聚类法,分解法,加入法,动态聚类法,有序样品聚类,有重叠聚类和模糊聚类。其中,我们很熟悉的就是K-均值、K-中心点等算法,经典以后可以单独来说这个

两种相似性度量:距离和相似系数

采用描述个体对(变量对)之间的接近程度的指标,例如“距离”,“距离”越小的个体(变量)越具有相似性。

采用表示相似程度的指标,例如“相关系数”,“相关系数”越大的个体(变量)越具有相似性。

再多说一点距离:用来度量样品之间的相似性,聚类——距离指标D(distance)的方法非常多:按照数据的不同性质,可选用不同的距离指标。欧氏距离(Euclidean distance)、欧氏距离的平方(SquaredEuclidean distance)、曼哈顿距离(Block)、切比雪夫距离(Chebychev distance)、卡方距离(Chi-aquaremeasure) 等;相似性也有不少,主要是皮尔逊相关系数。

方法一:系统聚类法的基本思想:令n个样品自成一类,计算出相似性测度,此时类间距离与样品间距离是等价的,把测度最小的两个类合并;然后按照某种聚类方法计算类间的距离,再按最小距离准则并类;这样每次减少一类,持续下去直到所有样品都归为一类为止。聚类过程可做成聚类谱系图(Hierarchical diagram)。这里的距离有很多例如最短距离法

l最短距离法(singlelinkage)

l最长距离法(completelinkage)

l中间距离法(medianmethod)

l可变距离法(flexiblemedian)

l重心法(centroid)

l类平均法(average)

l可变类平均法(flexibleaverage)

lWard最小方差法(Ward’sminimum variance)

注意:最长距离法,可变类平均法,离差平方和,注意这些都是有单调性的,中间距离法和重心性不具有单调性。这里的相似性:用来度量变量之间对相似性,r的绝对值接近1,就表示相关或者相似。

步骤:

s1.构造n个类,每个类包含且只包含一个样品。

s2.计算n个样品两两间的距离,构成距离矩阵,记作D0。

s3.合并距离最近的两类为一新类。

s4.计算新类与当前各类的距离。若类的个数等于1,转到步骤(5),否则回到步骤(3)。

s5.画聚类图。

s6.决定类的个数,及各类包含的样品数,并对类作出解释。

二、实现

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

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

方法二:层次聚类,该方法较为灵活,需要进行细节了解聚类原理,具体需要进行如下过程处理

(1)找到数据集合中变量两两之间的相似性和非相似性,用pdist函数计算变量之间的距离;

(2)用 linkage函数定义变量之间的连接;

(3)用 cophenetic函数评价聚类信息;

(4)用cluster函数创建聚类。

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

Matlab中的相关函数和相关聚类方法

pdist函数

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

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

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

metric’取值如下:

‘euclidean’:欧氏距离(默认);

‘seuclidean’:标准化欧氏距离;

‘mahalanobis’:马氏距离;

‘cityblock’:布洛克距离;

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

‘cosine’:

‘correlation’:

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

squareform 函数

Z = squareform(Y,..)

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

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、…来标识。

dendrogram函数

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

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

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

另外,还可以设置聚类数最下端的样本数,默认为30,可以根据修改dendrogram(Z,n)参数n来实现,1

cophenet函数

c=cophenet(Z,Y)

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

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

cluster 函数

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

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

clusterdata 函数

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

说明:根据数据创建分类。

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) isequivalent to:

Y = pdist(X,'euclid');

Z = linkage(Y,'single');

T = cluster(Z,'maxclust',CUTOFF)

Inconsistent函数

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.

计算深度会影响不一致系数的计算结果,计算深度比较大时,不一致系数的增量能反映出当前步引入的新样品与该类中心(涉及该类中所有样品)的距离远近,计算深度比较小时,不一致系数的增量仅能反映出当前步引入的新样品与上几步聚类中涉及的样品的中心的距离远近。

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

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')

结果如下图:

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

Step1 寻找变量之间的相似性,用pdist函数计算相似矩阵,有多种方法可以计算距离,进行计算之前最好先将数据用zscore函数进行标准化。

X2=zscore(X); %标准化数据

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

Step2 定义变量之间的连接

Z2=linkage(Y2);

Step3 评价聚类信息

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

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

T=cluster(Z2,6);

H=dendrogram(Z2);

minkowski sum matlab,Matlab 聚类分析相关推荐

  1. matlab 自定义距离函数,用MATLAB做聚类分析时非常有用的自定义距离函数和标准化函数...

    聚类分析中,经常遇到观测值缺失的情况. 例如统计历史降水资料时,某个月的资料缺失了,这时用MATLAB做聚类分析时, 就需要自定义距离函数,处理nan的问题. 下面是相关的MATLAB函数,里面有例子 ...

  2. MATLAB层次聚类分析

    实验题目 给出六个民族的出生死亡率,和他们的平均寿命,如下表所示 出生死亡率(%) 平均寿命 1 5.80 70.59 2 7.44 67.14 3 8.11 65.48 4 10.21 58.88 ...

  3. Matlab绘制聚类分析树状图

    工作环境(蓝色粗体字为特别注意内容) 1.软件环境:Windows 7 Ultimate sp1.MatlabR2012b 32bit. 在使用Matlab做聚类分析的时候一般这样用: Y = pdi ...

  4. matlab中的聚类算法,kmeans聚类算法matlab matlab 聚类算法silhouette

    怎样用matlab实现多维K-means聚类算法小编觉得一个好的周末应该是这样的:睡到中午醒来,在床上躺着玩两个小时手机,起床随便吃点东西,下午去超市买一大堆零食,五六点的时候去约小伙伴们吃火锅烧烤, ...

  5. matlab 样本均值,Matlab | Matlab从入门到放弃(4)——样本均值

    Matlab | Matlab从入门到放弃(4)--样本均值 Matlab | Matlab从入门到放弃(4)--样本均值 博主github:https://github.com/MichaelBee ...

  6. matlab 如何捕捉错误,【matlab|matlab运行错误捕捉方法】

    『傻大方知识库摘要_matlab|matlab运行错误捕捉方法』需安装VC2005运行库.Matlab错误提示往往以DOS窗口显示,错误提示经常一闪而过,无法查看具体错误信息,可以按照如下操作进行查看 ...

  7. wav数据提取 matlab,matlab 读取处理 wav 文件

    最近工作需要,要对wav文件中存储的声音信息进行分析处理.所以花了些时间收集了各种数学软件中处理wav文件的方法. Matlab Matlab 是最方便的.甚至于不用写任何代码就能读取wav文件(我用 ...

  8. [matlab]matlab cftool点了没反应

    [matlab]matlab cftool点了没反应 命名重复 首先排除是不是在同目录文件下新建了一个cftool.m文件,如果是的话将其改名,自定义为其他名字. 这就和写代码时同名变量覆盖一样,ma ...

  9. [C#] 调用MATLAB(Matlab COM接口) (一)调用函数

    目录 说明 一.Visual Studio 程序 1. Vs 新建项目 2. 编写 C# 程序 二.matlab.Execute() 1. MATLAB函数的输入输出 2. MATLAB Comman ...

  10. saber与matlab,MATLAB与SABER联合仿真(Co-sim)遇到的问题

    问题描述: 系统环境:WinXP SP3 简体中文 软件版本:Saber2008, Matlab R2008a. 仿真程序:throttle_controller, 对照软件给出的Tutorial执行 ...

最新文章

  1. 神州数码成为华为数通产物总代理
  2. 漫谈promise使用场景
  3. ABI 与 API 的区别(应用程序二进制接口、应用程序编程接口)
  4. python 如果没有该key值置为空_在python字典中用“None”替换空值
  5. 三年级计算机画图,三年级面积作图题_小学三年级要求画图
  6. 一次开发、多端分发,阿里巴巴发布AliOS车载小程序
  7. JavaEE规范与系统结构
  8. 在计算机中如何共享文件夹,如何打开计算机共享-在电脑里设置了共享文件在另在一台电脑里怎么 – 手机爱问...
  9. linux下的文件结构
  10. 关于java中assert(断言)的使用讲解
  11. Java 设计模式 之 模板方法模式(Template Method)
  12. centos 解决不在 sudoers 文件中。此事将被报告的问题
  13. Linux编译移植Qt5的环境_OMAPL138平台
  14. nosqlbooster pojie
  15. C - Quick Sort (one of the simplest)
  16. 笔记-项目人力资源管理-制订人力资源计划-矩阵图
  17. 基于主从博弈的智能小区电动汽车充电管理及代理商定价策略
  18. 如何成为一名架构师?
  19. MyBatis学习笔记(六)——高级查询之一对多映射
  20. LabVIEW练习16

热门文章

  1. 更改stata外部命令存放位置
  2. PS打开PSD文档服务器未响应,psd文件打不开怎么办-psd文件打不开的解决方法 - 河东软件园...
  3. 【BLE MIDI】MIDI 文件格式分析 ( MIDI 文件头解析 | MIDI 文件头标识 | MIDI 文件头长度 | MIDI 文件格式 | MIDI 轨道个数 | 基本时间 )
  4. vtk 实现mimics软件中的Split/Merge算法
  5. 浏览器插件Octotree的下载安装
  6. 10套R语言教程+练习题
  7. 对话系统的简单综述及应用智能客服
  8. CC2540蓝牙开发二 OSAL系统
  9. android开发之局域网内屏幕共享+提取文字01:截屏
  10. 知了课堂小程序es6