层次聚类分析星

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,代表我们要分别找出属于第一类、第二类、第三类的所有数据点。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(二)JSX基础

什么是JSX 概念:JSX是JavaScript和XML(HTML)的缩写,表示在JS代码中编写HTML模版结构,它是React中编写UI模板的方式。 优势:1.HTML的声明式模版方法;2.JS的可编程能力 JSX的本质 JSX并不是标准…

python 判断点和线段相交

python 判断点和线段相交 import numpy as np import cv2 import numpy as npdef point_to_line_distance(points, line_segments):# line_segments [[549, 303], [580, 303]]# points [565, 304]x0, y0, x1, y1line_segments[0][0], line_segments[0][1], line_segments[1]…

发布js插件到npm

创建项目 项目目录下运行npm i 命令,生成package.js文件。 package.js中配置插件包信息,如截图: index.js文件中export所有需要的类或文件输出变量。

【机器学习】我们该如何评价GPT-4o?GPT-4o的技术能力分析以及前言探索

目录 🤦‍♀️GPT-4o是什么? 🚍GPT-4o的技术能力 1. 自然语言理解 2. 自然语言生成 3. 对话系统 4. 语言翻译 5. 文本纠错 6. 知识问答 7. 定制和微调 8. 透明性和可解释性 9. 扩展性 🚐版本对比分析 1. GPT-4标准版 …

1310. 子数组异或查询 异或 前缀和 python

有一个正整数数组 arr,现给你一个对应的查询数组 queries,其中 queries[i] [Li, Ri]。 对于每个查询 i,请你计算从 Li 到 Ri 的 XOR 值(即 arr[Li] xor arr[Li1] xor ... xor arr[Ri])作为本次查询的结果。 并返回一…

人工智能程序员应该有什么职业素养?

人工智能程序员应该有什么职业素养? 面向企业需求去学习AI必备技能实战能力实战能力提升策略 面向企业需求去学习 如果想要应聘AI相关的岗位,就需要知道HR和管理层在招聘时需要考察些什么,面向招聘的需求去学习就能具备AI程序员该有的职业素…

知乎网站只让知乎用户看文章,普通人看不了

知乎默认不显示全部文章,需要点击展开阅读全文 然而点击后却要登录,这意味着普通人看不了博主写的文章,只有成为知乎用户才有权力查看文章。我想这不是知乎创作者希望的情况,他们写文章肯定是希望所有人都能看到。 这个网站篡改…

统计信号处理基础 习题解答10-9

题目 某质检员的工作是监控制造出来的电阻阻值。为此他从一批电阻中选取一个并用一个欧姆表来测量它。他知道欧姆表质量较差,它给测量带来了误差,这个误差可以看成是一个的随机变量。为此,质检员取N个独立的测量。另外,他知道阻值…

链表翻转,写法和交换类似,但是需要pre cur 还有一个临时变量nxt记录下一个结点

递归反转单链表(头插法反转部分链表 要弄pre cur 还有nxt(临时变量保存下一个结点 P0指到需要修改的链表的前一个结点 class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {ListNode dummynew ListNode(-1,head);L…

‘AndroidStudio工具平台’尝试运行‘Android原生项目’

AndroidStudio工具平台 (内嵌Intelli IDEA集成环境) /Users/haijunyan/Library/Android/sdk 配置环境变量: #adb命令,安装APK查看连接设备 platform-tools #emulator命令,通过命令创建模拟器 tools #用NDK框架搭建的项目,用到下面的命令编译 …

30分钟吃掉 Pytorch 转 onnx

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

【算法小记】深度学习——时间序列数据分析 Time series Data Analysis

在本篇博客中将简单介绍常见的几种循环神经网络和一维卷积神经网络,并使用一些简答的数据进行拟合分析。本文相对适合刚入门的同学,同时也作为自己过去一段时间学习的总结和记录,现在神经网络框架已经非常完善的支持了很多常见和有效的深度学…

Bootstrap框架集成ECharts教程

最新公司项目要在原有的基础上增加一些饼状图和柱状图来统计一些数据给客户,下面就是集成的一个过程,还是很简单的,分为以下几步 1、引入ECharts的包 2、通过ECharts官网或者菜鸟教程直接拿示例代码过来修修改改直接用就可以了 注意&#xf…

Python爬虫入门与登录验证自动化思路

1、pytyon爬虫 1.1、爬虫简介 Python爬虫是使用Python编写的程序,可以自动访问网页并提取其中的信息。爬虫可以模拟浏览器的行为,自动点击链接、填写表单、进行登录等操作,从而获取网页中的数据。 使用Python编写爬虫的好处是,…

python中while循环实现九九乘法表

i 1while i < 9: # 控制行的循环j 1while j < i: # 控制每行的输出print(f"{j}*{i}{j * i}\t", end"")j 1print()i 1运行截图&#xff1a;

ARM-V9 RME(Realm Management Extension)系统架构之系统安全能力的架构差异

安全之安全(security)博客目录导读 RME系统中的应用处理单元&#xff08;PE&#xff09;之间的架构差异可能会带来潜在的安全风险并增加管理软件的复杂性。例如&#xff0c;通过在ID_AA64MMFR0_EL1.PARange中为每个PE设置不同的值来支持不同的物理范围&#xff0c;可能会妨碍内…

复数的概念

1. 虚数单位&#xff1a;i 引入一个新数 ‘i’&#xff0c;i又叫做虚数单位&#xff0c;并规定&#xff1a; 它的平方等于 -1&#xff0c;即 i -1。实数可以与它进行四则运算&#xff0c;并且原有的加&#xff0c;乘运算律依然成立。 2.定义 复数的定义&#xff1a;形如 a…

医学领域科技查新点提炼方法!---附案例分析

医学领域的查新项目研究范围较广&#xff0c;涉及基础医学、临床医学、中医学、预防医学、卫生学、特种医学等众多与人类健康和疾病有关的科学。查新目的主要包括立项、成果鉴定和报奖&#xff0c;有的期刊投稿也要求作者提供查新报告。 医学领域查新项目的两极化较明显&#…

(Proteus仿真设计)基于51单片机的电梯程序控制系统

&#xff08;Proteus仿真设计&#xff09;基于51单片机的电梯程序控制系统 一.项目介绍 本设计模拟的是一个五层的&#xff0c;各楼层间隔为4.5m的电梯程序控制系统&#xff0c;能够完成各楼层乘客的接送任务。形象地说&#xff0c;就是要对不同楼层乘客的不同需求&#xff0…

【NI国产替代】产线综测仪:锂电池保护板测试仪,支持快速定制

• 精度等级01% • 支持直流电压、电流、nA 级待机电流电阻等&#xff0c;常规测试 • 支持过压、欠压、过冲、过放、过温,短路等&#xff0c;保护测试 • 通讯总线电平可编程&#xff0c;兼容多种 • 支持 SWD 或IIC 固件烧录 • 测试速度快&#xff0c;支持最多 24 通道…