我们一起聊聊分类模型:层次聚类

发布于 2024-12-30 13:13
浏览
0收藏

1.算法介绍

层次聚类(Hierarchical Clustering) 是一种常用的数据聚类算法,它通过构建一个聚类树来分析数据集的相似度和差异。这种算法不需要预先指定聚类数,非常适合于探索性数据分析。层次聚类主要包括两种方法:凝聚型(Agglomerative)和分裂型(Divisive)。本文将重点介绍凝聚型层次聚类,并通过MATLAB实现数据的层次聚类分析。

2.算法原理

凝聚型层次聚类的基本步骤如下:

  • 初始化:开始时,将每个数据点视为一个独立的聚类。
  • 计算距离:计算所有聚类之间的距离。
  • 合并聚类:选择最近的两个聚类合并成一个新的聚类。
  • 更新距离:更新新聚类与其他聚类之间的距离。
  • 重复:重复步骤3和4,直到所有数据合并成一个聚类或达到预定的聚类数量。

距离的计算方式可以有多种,如单链接(最近邻)、完全链接(最远邻)、平均链接(组平均)等。选择不同的距离计算方法会影响聚类的结果。

3.实例分析

3.1 生成模拟数据

首先,我们使用MATLAB生成一组二维模拟数据。

% 生成三个明显分离的数据群
rng('default');  % 为了结果的可重现性
data1 = mvnrnd([2 2], [.5 .5], 50);
data2 = mvnrnd([-2 -2], [.5 .5], 50);
data3 = mvnrnd([2 -2], [.5 .5], 50);

% 合并数据集
data = [data1; data2; data3];

% 可视化原始数据
scatter(data(:,1), data(:,2), 10, 'filled')
title('模拟数据集')
xlabel('X坐标')
ylabel('Y坐标')

绘制生成的数据散点图:

我们一起聊聊分类模型:层次聚类-AI.x社区

3.2 进行层次聚类

使用MATLAB的linkage和dendrogram函数来进行层次聚类并可视化结果。

% 使用欧氏距离和平均链接方法进行层次聚类
Z = linkage(data, 'average', 'euclidean');

% 绘制树状图
figure;
dendrogram(Z)
title('层次聚类的树状图')
xlabel('样本索引')
ylabel('距离')

层次聚类结果图:

我们一起聊聊分类模型:层次聚类-AI.x社区

4. 结论

通过MATLAB实现的层次聚类能够有效地将模拟数据分组。本例中,我们选择了平均链接方法和欧氏距离,结果清晰地展示了数据的三个聚类。层次聚类适用于各种数据分析场景,特别是在数据结构未知时,它提供了一种直观的方法来探索数据集的结构。

本文转载自 宝宝数模AI,作者: BBSM

收藏
回复
举报
回复
相关推荐