层次聚类分析星

news2024/11/27 23:49:43
clc,clear
a = [73,40,7;
     60,15,5;
     61,19,2;
     34,18,6;
     67,126,10;
     91,40,4;
     101,40,13;
     81,40,6;
     88,40,8;
     122,40,17;
     102,50,17;
     87,50,12;
     110,50,14;
     164,50,17;
     40,30,1;
     76,40,17;
     118,50,9;
     160,50,15];
 [m,n] = size(a);
 d = zeros(m);  
 d = mandist(a');    % mandist 求矩阵列向量组之间的两两绝对值
 d = tril(d);       % 截取下三角元素,将矩阵d转为下三角矩阵
 nd = nonzeros(d);  % 去掉d中的元素,非零元素按列排列
 nd = unique(nd)    % 去掉重复的非零元素
 for i = 1:m-1  % 对非零距离数组nd进行循环
     nd_min = min(nd);  % 每次迭代选择最小的距离值
     [row,col] = find(d == nd_min); % 找到所有等于当前最小距离的行和列索引
     tm = union(row,col);	 %row和col归为一列 合并这些索引形成一个集合tm
     tm = reshape(tm,1,length(tm));     % 把数组tm变成列向量   
     fprintf('第%d次合成,平台高度为%d时的分类结果为:%s \n',...
         i,nd_min,int2str(tm));
     nd(nd == nd_min) = []; % 从nd中移出已处理的最小距离值,直到没有剩余距离值可处理
     if length(nd) == 0
         break
     end
 end
 % 计算距离矩阵
dist_matrix = pdist(a,'cityblock'); % 使用曼哈顿距离

% 构建层次聚类树
Z = linkage(dist_matrix); % 使用ward方法,也可以尝试其他方法如'single', 'complete', 'average'
disp('距离矩阵:')
disp(Z)
% 绘制层次聚类图
figure;
dendrogram(Z);
title('亚洲球队聚类图');
1.mandist()

mandist(A, B)

  • 是用来求A中每个行向量与B中每个列向量的绝对距离
  • 要求:mandist两个参数表示两个矩阵,第一个矩阵的列数 = 第二个矩阵的行数
  • 结果维数:行数 = 第一个矩阵的行数, 列数 = 第二个矩阵的列数

eg.一维

a = [1, 2, 3]

b = [-1, 5, 6]

mandist(a, b') = 8

% a(1, 3)        b'(3, 1)

% |1- (-1)| +|2 - 5| + |3 - 6| = 8

eg.二维

A = [1, 2, 3

        4, 5, 6]

mandist(A, A') = [0, 9

                           9, 0]

% A' = [1, 4

            2, 5

            3, 6]

% x(1,1) = |1-1| + |2-2| +|3-3| = 0
% x(1,2) = |1-4| + |2-5| +|3-6| = 9
% x(2,1) = |4-1| + |5-2| +|6-3| = 9
% x(2,2) = |4-4| + |5-5| +|6-6| = 0

2.reshape()

B = reshape(A, m, n)

将矩阵A的元素返回到一个m x n的矩阵B中。如果A中没有m x n个元素,则返回错误。

3.pdist()

成对观测值之间的两两距离,用于计算一个数据中所有点对之间的距离,基本语法:

D = pdist(X, distance)

  • X:输入数据矩阵,其中每一行代表一个观测或样本,每一列代表一个特征。例如,如果你又100个样本,每个样本有3个特征,那么X就是一个100x3的矩阵。
  • distance:(可选参数)字符串,指定计算距离的方法,包括但不限于
    • 'euclidean':欧式距离,是最常见的距离度量,如果第二个参数不写,默认用欧式距离
    • 'cityblock':曼哈顿距离,也称街区距离

官网文档:成对观测值之间的两两距离 - MATLAB pdist - MathWorks 中国

4.linkage()

生成具有层次结构的聚类树

Z = linkage(Y, method, metric)

  • Y为输入矩阵是pdist函数输出的距离行向量
  • method包括但不限于:
    • 'single':最短距离法(默认),合并距离最近的两个对象
    • 'ward':内平方距离法(最小方差算法),合并使簇内方差增量最小的两个簇
    • 'average':平均距离法,合并平均距离最小的两个簇
  • metric:(可选参数)当Y是相似性矩阵时,用于指定相似性转换为距离时的度量,默认通常                  是'euclidean'。metric参数是用来指定计算距离或相似性的方式。这个参数通常在                    距离计算函数(如 pdist)中使用,或者间接地影响到 linkage函数的行为,尤其                      是当你直接提供了相似性矩阵给 linkage时。

输出:是一个 包含聚类树信息的(m-1) x 3的矩阵,其中m是输入数据点的数量,每一行代表一个聚类步骤

  • 之所以是 n-1行,是因为聚类过程是从 n 个单独的点开始,每次合并两个最接近的点或簇,最终形成一个单一的大簇,一共需要合并 n-1 次才能完成这个过程。
  • 每一行代表一个聚类步骤:矩阵的每一行对应于聚类过程中的一步,即一次具体的合并操作。随着行数的增加,聚类步骤逐步进行,最终达到所有数据点合并为一个簇。

  • 三列的含义

    • 第一列(索引 i):表示被合并的第一个簇在当前步骤中的临时簇编号(这个编号是按合并顺序分配的,从1开始,每次合并新簇产生就增加一个编号)。
    • 第二列(索引 j):表示被合并的第二个簇的临时簇编号。注意,i 总是小于 j,以避免重复计算。
    • 第三列(距离 d):表示簇 i 和簇 j 在合并时的距离,这个距离的计算依赖于你在调用 linkage 函数时选择的 method 参数(如最小距离、最大距离、平均距离、Ward's 方法等)。这个距离可以被理解为两个簇间的不相似度或分离程度。

官方文档:聚集分层聚类树 - MATLAB 链接 - MathWorks 中国

    

5.dendrogram()

dendrogram(Z)

  • Z: 必需参数,是一个由linkage函数生成的(m-1)x3 的矩阵,其中 m 是原始数据点的数量。每一行代表一次聚类合并,包含参与合并的簇索引和合并时的距离。

  • Orientation: 可选参数,指定树状图的方向,可以是'top'(默认),树状图朝上生长)、'bottom'(朝下生长)、'left' 或' right'。

  • ColorThreshold: 用于设置颜色阈值,以此为界线在树状图上标示不同颜色,从而直观地区分簇。当聚类树的垂直距离超过这个阈值时,连接线将改变颜色。

clc,clear
a = [73,40,7;
     60,15,5;
     61,19,2;
     34,18,6;
     67,126,10;
     91,40,4;
     101,40,13;
     81,40,6;
     88,40,8;
     122,40,17;
     102,50,17;
     87,50,12;
     110,50,14;
     164,50,17;
     40,30,1;
     76,40,17;
     118,50,9;
     160,50,15];
 z = linkage(a, 'single', 'cityblock')
 dendrogram(z)
 T = cluster(z,'maxclust',3)
 for i = 1: 3
     tm = find(T == i)
     fprintf('第%d类的有:%s\n',i,int2str(tm));
 end
6.cluster()

T = cluster(z, 'cutoff', d)

根据linkage输出的 Z 进行层次聚类,并且直接指定要分成 d 个簇(类)。cluster函数会根据聚类树(由Z定义)在某个特定高度(cutoff)切割树,返回一个向量T ,其中每个元素表示对应于a中行的簇分配。例如,如果T = [1, 2, 1, 3, 1, ...],这表示第一行和第三行的数据点被分到了第一类(簇1),第二行数据点分到了第二类(簇2),第四行数据点分到了第三类(簇3),依此类推。

find(T == i) 是一个查找操作,它遍历向量T中的每一个元素,检查哪些元素的值等于当前的循环变量i。这里的i在循环for i = 1 : 3中依次取值1、2、3,代表我们要分别找出属于第一类、第二类、第三类的所有数据点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1805018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pxe批量部署linux介绍

1、PXE批量部署的作用及必要性: 1)智能实现操作系统的批量安装(无人值守安装)2)减少管理员工作,提高工作效率3)可以定制操作系统的安装流程a.标准流程定制(ks.cfg)b.自定义流程定制(ks.cfg(%pos…

linux系统——telnet,ssh命令

telent命令用于登录远程主机,监测远程主机端口是否打开,明文传输,安全性较低,后被弃用,改为ssh

『大模型笔记』Transformer的几种高效自注意力(降低计算复杂度的方法)!

Transformer的几种高效自注意力(降低计算复杂度的方法)! 文章目录 一. 快速回顾一下注意力机制二. 有哪些技术可以用来提高注意力的效率1. Sparse attention(1) 算法原理:Strided Attention & Fixed Attention(2) 复杂度分析: O ( N N p ) \mathscr{O}(N\sqrt[p]{N}) O(…

[学习笔记] VFX Silhouette

Part 1 : The interface of Silhouettte (Silhouette的界面介绍) Part 2: The shape divisions and manual roto(形状分区和手动roto工作): roto过程一般使用 b 曲线roto工作需要逐帧工作按Alt可以修改锚点(拖动)和改变锚点平滑…

基于Gabor小波特征提取和PSO-SVM的胃溃疡分类(MATLAB R2018a)

Gabor滤波器是在测不准原则下能够在时域和频域中唯一能取得最佳的联合分辨率函数(测不准原则:是指在时域与频域中都要获得任何的测量精度那是不可能同时实现的,要使时域分辨率有所提高,必须牺牲频域的分辨率,反之亦然&…

Hugging Face系列2:详细剖析Hugging Face网站资源——实战六类开源库

Hugging Face系列2:详细剖析Hugging Face网站资源——实战六类开源库 前言本篇摘要2. Hugging Face开源库2.1 transformers2.1.1 简介2.1.2 实战1. 文本分类2. 图像识别3. 在Pytorch和TensorFlow中使用pipeline 2.2 diffusers2.2.1 简介2.2.2 实战1. 管线2. 模型和调…

【AI大模型】Prompt Engineering

目录 什么是提示工程(Prompt Engineering) Prompt 调优 Prompt 的典型构成 「定义角色」为什么有效? 防止 Prompt 攻击 攻击方式 1:著名的「奶奶漏洞」 攻击方式 2:Prompt 注入 防范措施 1:Prompt 注…

如何从清空的回收站恢复照片

担心如何从清空的回收站中恢复已删除的照片?您删除的文件和文件夹暂时存储在 Windows 回收站中。它使 Windows 用户能够快速恢复意外或故意丢失的项目。但是,为了释放计算机驱动器上的某些空间,有时可能需要清理回收站。 然而,有…

车用柴油氧化安定性检测 GB 19147-2009全项检测

柴油分为轻柴油(沸点范围约180-370℃)和重柴油(沸点范围约350-410℃)两大类。柴油使用性能中最重要的是着火性和流动性,其技术指标分别为十六烷值和凝点,我国柴油现行规格中要求含硫量控制在0.5%-1.5%。 检…

增值税发票OCR识别功能介绍

OCR增值税发票识别功能介绍如下: 一、技术原理 OCR增值税发票识别系统基于光学字符识别(OCR)技术和人工智能的支持,将传统纸质发票的信息自动转换为计算机可以读取的数字信息。具体技术流程包括: 图像预处理&#x…

SAP ABAP 往数据库表里加数据

目录 方法一:SE16N SE11 方法二:创建维护VIEW:SE11 SM30 Error补充说明: 方法一:SE16N SE11 首先SE16N 进来。 进来之后在テーブル的位置输入表名,然后点击执行(F8) 如果第一次…

【复现】含能量路由器的交直流混合配电网潮流计算

目录 1 主要内容 2 理论及模型 3 程序结果 4 下载链接 1 主要内容 程序复现《含能量路由器的交直流混合配电网潮流计算》,主要是对算例4.1进行建模分析,理论和方法按照文献所述。能量路由器(ER)作为新兴的电力元器件&#xff…

八、【源码】细化XML语句构建器,完善静态SQL解析

源码地址:https://github.com/mybatis/mybatis-3/ 仓库地址:https://gitcode.net/qq_42665745/mybatis/-/tree/08-optimize-xml-parse 细化XML语句构建器,完善静态SQL解析 这一节主要是优化XML解析SQL部分,流程大概为&#xff…

SpringBoot+Vue企业客户管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 员工管理员 功能截图

饥荒云服务器卡顿情况如何解决

随着网络游戏的普及,云服务器逐渐成为游戏开发者和玩家们的首选。然而,在使用饥荒云服务器时,有时会遇到卡顿的问题,这给玩家带来了困扰。本文将探讨饥荒云服务器卡顿的原因,并提供一些可能的解决方法。 卡顿产生的原因…

Vyper重入漏洞解析

什么是重入攻击 Reentrancy攻击是以太坊智能合约中最具破坏性的攻击之一。当一个函数对另一个不可信合约进行外部调用时,就会发生重入攻击。然后,不可信合约会递归调用原始函数,试图耗尽资金。 当合约在发送资金之前未能更新其状态时&#…

分布式事务大揭秘:使用MQ实现最终一致性

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米,一个热爱分享技术的29岁程序员,今天我们来聊聊分布式事务中的一种经典实现方式——MQ最终一致性。这是一个在互联网公司中广…

第一篇红队笔记-百靶精讲之W1R3S-john

https://download.vulnhub.com/w1r3s/w1r3s.v1.0.1.zip 主机发现 nmap端口扫描及思路 扫描某个网段 扫描单个ip所有端口 重复扫描单个ip具体端口 udp协议再来一次 漏洞扫描 FTP渗透 尝试匿名登陆 防止文件损坏 识别加密方式-hash-identifier base64 Web目录爆破…

AI如何创造情绪价值

随着科技的飞速发展,人工智能(AI)已经渗透到我们生活的方方面面。从智能家居到自动驾驶,从医疗辅助到金融服务,AI技术的身影无处不在。而如今,AI更是涉足了一个全新的领域——创造情绪价值。 AI已经能够处…

Leetcode 剑指 Offer II 081.组合总和

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个无重复元素的正整数数组 candidates 和一个正整数 targe…