Matlab实现AGNES算法

在数据分析和机器学习中,聚类是一种常用的无监督学习方法,它可以将数据点按照某种相似度标准进行分组,从而发现数据中的结构和模式。聚类算法有很多种,其中一种比较经典的是AGNES算法,它是一种基于层次的聚类算法,它的全称是Agglomerative Nesting,即凝聚式嵌套。在这篇博客中,我将介绍AGNES算法的原理和意义,并给出一个用Matlab实现的代码示例。

目录

一、什么是AGNES算法

二、AGNES算法的意义

三、如何实现AGNES算法

这里是希望和大家一起进步的小高,愿意和读者们热情探讨😊


一、什么是AGNES算法

AGNES算法是一种基于层次的聚类算法,它的全称是Agglomerative Nesting,即凝聚式嵌套。AGNES算法的核心思想是从下而上地将数据点按照相似度进行合并,直到达到预设的簇的个数或者满足停止条件。

二、AGNES算法的意义

AGNES算法的好处有:

  • 不需要预先指定簇的个数,可以自动发现合适的簇的个数。
  • 可以生成一个树形结构,表示数据点之间的层次关系,方便进行可视化和分析。
  • 可以使用不同的距离度量和链接方法,适应不同的数据特征和需求。

例如,如果我们想要对一些文本数据进行聚类,我们可以使用余弦相似度作为距离度量,并使用平均链接作为链接方法。

AGNES算法的应用场景有:

  • 数据挖掘:可以用于对大量数据进行分组和分类,发现数据中的潜在模式和规律。
  • 信息检索:可以用于对文档或网页进行聚类,提高检索效率和质量。
  • 生物信息学:可以用于对基因或蛋白质进行聚类,揭示生物系统的结构和功能。
  • 图像处理:可以用于对图像进行分割或压缩,提高图像质量和效果。

三、如何实现AGNES算法

Matlab中有一个内置的函数linkage,可以用来实现AGNES算法。linkage函数的基本用法如下:

Z = linkage(X,method,pdist_inputs)

其中,X是一个n行p列的数据矩阵,表示n个样本和p个特征;method是一个字符串,表示用于计算簇之间距离的方法;pdist_inputs是一个字符串或者一个函数句柄,表示用于计算样本之间距离的方法。linkage函数的输出Z是一个(n-1)行3列的矩阵,表示层次聚类的结果。Z的每一行表示一次合并操作,第一列和第二列表示被合并的两个簇的编号,第三列表示合并后的簇之间的距离。

为了方便理解,编写了一个简单的Matlab代码,用来实现AGNES算法,并对每一行进行了注释。代码如下:

java 复制代码
% 生成一个随机数据集
rng(1); % 设置随机数种子
X = [randn(10,2)+ones(10,2); randn(10,2)-ones(10,2)]; % 生成20个二维数据点

% 画出数据点的散点图
figure;
plot(X(:,1),X(:,2),'o'); % 画出数据点
title('Random Data Set'); % 设置标题
xlabel('x1'); % 设置x轴标签
ylabel('x2'); % 设置y轴标签

% 使用linkage函数进行层次聚类
Z = linkage(X,'average','euclidean'); % 使用平均距离和欧氏距离进行聚类

% 画出层次聚类的树状图
figure;
dendrogram(Z); % 画出树状图
title('Hierarchical Clustering Dendrogram'); % 设置标题
xlabel('Sample Index'); % 设置x轴标签
ylabel('Distance'); % 设置y轴标签

% 根据树状图选择合适的截断点,得到聚类结果
c = cluster(Z,'maxclust',2); % 将数据划分为两个簇

% 画出聚类结果的散点图
figure;
gscatter(X(:,1),X(:,2),c); % 画出不同颜色的数据点
title('Cluster Result'); % 设置标题
xlabel('x1'); % 设置x轴标签
ylabel('x2'); % 设置y轴标签

这里是希望和大家一起进步的小高,愿意和读者们热情探讨😊

相关推荐
wen__xvn5 小时前
代码随想录算法训练营DAY15第六章 二叉树part03
数据结构·算法·leetcode
Sagittarius_A*5 小时前
图像滤波:手撕五大经典滤波(均值 / 高斯 / 中值 / 双边 / 导向)【计算机视觉】
图像处理·python·opencv·算法·计算机视觉·均值算法
seeksky5 小时前
Transformer 注意力机制与序列建模基础
算法
冰暮流星5 小时前
c语言如何实现字符串复制替换
c语言·c++·算法
Swift社区5 小时前
LeetCode 374 猜数字大小 - Swift 题解
算法·leetcode·swift
Coovally AI模型快速验证5 小时前
2026 CES 如何用“视觉”改变生活?机器的“视觉大脑”被点亮
人工智能·深度学习·算法·yolo·生活·无人机
有一个好名字5 小时前
力扣-链表最大孪生和
算法·leetcode·链表
AshinGau5 小时前
Groth16 ZKP: 零知识证明
算法
无限进步_5 小时前
【C语言&数据结构】二叉树链式结构完全指南:从基础到进阶
c语言·开发语言·数据结构·c++·git·算法·visual studio
明月下5 小时前
【视觉算法——Yolo系列】Yolov11下载、训练&推理、量化&转化
算法·yolo