聚类分析(代码篇)

聚类分析一般思路

  1. 数据标准化;
  2. 确定相似性度量(距离)算法;
    ①Q型算法(样本距离->类之间距离)
    ②R型算法(变量距离->类之间距离)
  3. 生成聚类树;
  4. 画出聚类图;
  5. 显示分类结果;

数据标准化

数据矩阵X=(xij)m×n进行标准化处理,处理方式: x ^ i j = x i j − x j — s j 其 中 x j — , s j 为 矩 阵 X = ( x i j ) m × n 每 一 列 的 均 值 和 标 准 差 ; \hat x_{ij}=\frac{x_{ij}-\overset{—}{x_{j}}}{s_{j}}\\其中\overset{—}{x_{j}},s_{j}为矩阵X=(x_{ij})_{m×n}每一列的均值和标准差; x^ij=sjxijxjxj,sjX=(xij)m×n

 zscre(X);%对矩阵X进行列标准化处理

相似性度量(距离)算法

  • 根据数据矩阵Xm×n(看作m个n维行向量),每一个n维行向量即是一个∈Rn的对象,利用matlab内置函数,
    pdist(X,'metric')计算两两对象间的距离;
    得到m(m-1)/2维距离行向量d
  • 根据距离行向量d,利用matlab内置函数,
    squareform(d)得到m×m的距离矩阵D
    X = [ x 1 → x 2 → ⋮ x m → ] ; d = [ d 1 , d 2 , ⋯   , d m ( m − 1 ) 2 ] (1) X= \left[ \begin{matrix}\overset{\rightarrow}{x_{1}}\\ \overset{\rightarrow}{x_{2}} \\ \vdots \\ \overset{\rightarrow}{x_{m}}\end{matrix}\right] ;d=\left[ \begin{matrix}d_{1}, d_{2} , \cdots , d_{\frac{m(m-1)}{2}}\end{matrix}\right] \tag{1} X=x1x2xm;d=[d1,d2,,d2m(m1)](1)
 %数据矩阵
 X=[1,0;1,1;3,2;4,3;2,5];
 %距离向量
 d=pdist(X,'cityblock');%cityblock:计算绝对值距离
 %距离矩阵
 D=squareform(Y); 

结果如下:
d = [ 1 4 6 6 3 5 5 2 4 4 ] D = x → 1 x → 2 x → 3 x → 4 x → 5 x → 1 0 1 4 6 6 x → 2 0 3 5 5 x → 3 0 2 4 x → 4 0 4 x → 5 0 (2) d=[\begin{matrix} 1& 4 & 6 & 6 & 3 & 5 & 5 & 2 & 4 & 4\end{matrix}]\\D=\begin{matrix} & \overset{\rightarrow}x_{1}& \overset{\rightarrow}x_{2}& \overset{\rightarrow}x_{3}& \overset{\rightarrow}x_{4}& \overset{\rightarrow}x_{5} \\ \overset{\rightarrow}x_{1}&0&1&4&6&6\\ \overset{\rightarrow}x_{2}& &0&3&5&5\\ \overset{\rightarrow}x_{3}& & &0&2&4\\ \overset{\rightarrow}x_{4}& & & &0&4\\ \overset{\rightarrow}x_{5}& & & & &0 \\ \end{matrix}\tag{2} d=[1466355244]D=x1x2x3x4x5x10x210x3430x46520x565440(2)
明显:距离向量(d)与距离矩阵(D)的关系如下图
d与D的关系

  • 参数metric指定计算样本距离的方法:
字符串含义字符串含义
euclidean欧氏距离(默认)hamming海明距离
seuclidean标准欧几里得距离custom distance function自定义函数距离
cityblock绝对值距离cosine1-两个向量夹角的余弦
minkowski闵氏距离correlation1-样本的相关系数
chebychev切比雪夫距离spearman1-样本的Spearman秩相关系数
mahalanobis马氏距离jaccard1-Jaccard系数

生成聚类(二叉)树

  • 根据距离行向量d,利用matlab内置函数,linkage(d,'method')生成聚类树;
    matlab中利用信息矩阵Z来描述聚类树;
%聚类(二叉)树信息矩阵
Z=linkage(d);%默认使用最短距离法

结果如下:
Z = [ 1 2 1 3 4 2 6 7 3 5 8 4 ] ⟶ 含 义 Z = [ j h a h b d h m + j 1 1 2 1 6 2 3 4 2 7 3 6 7 3 8 4 5 8 4 9 ] (3) Z= \left[\begin{matrix} 1&2&1\\ 3&4&2\\ 6&7&3\\ 5&8&4 \end{matrix}\right] \overset{含义}\longrightarrow Z= \left[ \begin{array}{c|ccc|c} j&h_{a}&h_{b}&d&h_{m+j}\\ 1&1&2&1&6\\ 2&3&4&2&7\\ 3&6&7&3&8\\ 4&5&8&4&9 \end{array}\right]\tag{3} Z=136524781234Z=j1234ha1365hb2478d1234hm+j6789(3)其中:**表示第j次融合,ha表示融合的节点a,hb表示融合的节点b,d表示平台的高度, hm+j 表示生成的新节点;

  • 参数method指定计算类之间距离的算法:
字符串含义字符串含义
single最短距离(默认)median赋权重心距离
average无权平均距离ward离差平方和方法
centroid重心距离weighted赋权平均距离
complete最大距离

画出聚类图

  • 根据聚类树信息矩阵,利用matlab内置函数
    dendrogrom(Z)生成聚类图H
%画出聚类图
H=dendrogram(Z);

结果如下:

在这里插入图片描述


显示分类结果

  • 根据聚类树信息矩阵,利用matlab内置函数cluster(Z,'cutpff',c)生成聚类信息向量T
%进行聚类,生成聚类信息向量T
T=cluster(Z,'maxclust',3);

结果如下:
T = [ 1 1 2 2 3 ] ⟶ 含 义 T = [ j k 1 1 2 1 3 2 4 2 5 3 ] T=\left[\begin{matrix} 1\\1\\2\\2\\3 \end{matrix}\right] \overset{含义}\longrightarrow T=\left[\begin{matrix} j&k\\ 1&1\\ 2&1\\ 3&2\\ 4&2\\ 5&3\\ \end{matrix}\right] T=11223T=j12345k11223
式中:j表示为第j个对象即xj;k表示xj从属聚类后的第几类;

  • 参数c指定聚类后类的个数:
    如前叙例子中,c=3,T取值{1,2,3},聚类后类的个数为3;

  • 参数cutpffxxx:
    一般直接使用cutpff=maxclust

  • 参数意义详解


总结

标准化
样本距离算法
类之间距离算法
数据矩阵X
X'
距离向量d
聚类树信息矩阵Z
画出聚类图H
聚类信息向量T
输出聚类
  • 13
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
r型聚类分析的Matlab代码如下: ```matlab % 数据标准化 % 假设数据矩阵为A A = \[1 2 3; 4 5 6; 7 8 9\]; A = zscore(A); % 使用zscore函数进行标准化 % 生成相似性度量矩阵 d = 1 - abs(A); % 生成聚类树 y = linkage(d, 'average'); % 画出聚类图 dendrogram(y); % 显示分类结果 L = cluster(y, 'maxclust', 3); for i = 1:3 b = find(L == i); b = reshape(b, 1, length(b)); fprintf('第%d类的有%s\n', i, int2str(b)); end ``` 这段代码首先对数据进行标准化,然后根据标准化后的数据生成相似性度量矩阵。接下来,使用linkage函数生成聚类树,并使用dendrogram函数画出聚类图。最后,使用cluster函数根据聚类树信息矩阵生成聚类信息向量T,然后根据向量T显示分类结果。在这个例子中,聚类数目为3。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [MATLAB 学习 —— 聚类分析法](https://blog.csdn.net/NULL_WZK/article/details/97917542)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [聚类分析(代码)](https://blog.csdn.net/qq_45149408/article/details/107168874)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值