
回复
层次聚类(Hierarchical Clustering) 是一种常用的数据聚类算法,它通过构建一个聚类树来分析数据集的相似度和差异。这种算法不需要预先指定聚类数,非常适合于探索性数据分析。层次聚类主要包括两种方法:凝聚型(Agglomerative)和分裂型(Divisive)。本文将重点介绍凝聚型层次聚类,并通过MATLAB实现数据的层次聚类分析。
凝聚型层次聚类的基本步骤如下:
距离的计算方式可以有多种,如单链接(最近邻)、完全链接(最远邻)、平均链接(组平均)等。选择不同的距离计算方法会影响聚类的结果。
首先,我们使用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坐标')
绘制生成的数据散点图:
使用MATLAB的linkage和dendrogram函数来进行层次聚类并可视化结果。
% 使用欧氏距离和平均链接方法进行层次聚类
Z = linkage(data, 'average', 'euclidean');
% 绘制树状图
figure;
dendrogram(Z)
title('层次聚类的树状图')
xlabel('样本索引')
ylabel('距离')
层次聚类结果图:
通过MATLAB实现的层次聚类能够有效地将模拟数据分组。本例中,我们选择了平均链接方法和欧氏距离,结果清晰地展示了数据的三个聚类。层次聚类适用于各种数据分析场景,特别是在数据结构未知时,它提供了一种直观的方法来探索数据集的结构。
本文转载自 宝宝数模AI,作者: BBSM