3. Part I – K‑Means 聚类分析

这一节将结合你前面已经标准化并剔除异常值的数据,展示如何在 MATLAB 中实施 K‑Means 聚类,并进行可视化与评价。


3. Part I – K‑Means 聚类分析

K‑Means 是最常用的划分式聚类方法,其基本思想是:在样本空间中设定 KK 个初始质心,然后通过迭代将每个样本划归其最近的质心,更新质心位置,直至结果收敛。K‑Means 假设簇为凸形、均方差相近,因此对高斯分布簇具有良好效果。


3.1 算法调用与参数设置

% 输入变量:标准化后且剔除异常值的特征矩阵
X = X_filtered;

% 聚类数K的设定(可先经验设为3)
K = 3;

% 运行K-Means(推荐使用 'plus' 初始化、多个重复迭代提高稳定性)
opts = statset('Display', 'final');
[idx, C, sumd] = kmeans(X, K, ...
    'Distance', 'sqeuclidean', ...
    'Replicates', 20, ...
    'Start', 'plus', ...
    'Options', opts);
  • idx:每个样本所属簇编号(1~K)
  • C:每个簇的中心(质心)坐标
  • sumd:每个簇内平方和误差(SSE)

第 1 次重复,4 次迭代,总距离 = 114.639。 第 2 次重复,9 次迭代,总距离 = 114.639。 第 3 次重复,4 次迭代,总距离 = 114.639。 第 4 次重复,2 次迭代,总距离 = 114.639。 第 5 次重复,6 次迭代,总距离 = 114.639。 第 6 次重复,3 次迭代,总距离 = 114.639。 第 7 次重复,12 次迭代,总距离 = 114.639。 第 8 次重复,14 次迭代,总距离 = 114.639。 第 9 次重复,2 次迭代,总距离 = 114.639。 第 10 次重复,2 次迭代,总距离 = 114.639。 第 11 次重复,3 次迭代,总距离 = 114.639。 第 12 次重复,3 次迭代,总距离 = 114.639。 第 13 次重复,2 次迭代,总距离 = 114.639。 第 14 次重复,2 次迭代,总距离 = 114.639。 第 15 次重复,2 次迭代,总距离 = 114.639。 第 16 次重复,3 次迭代,总距离 = 114.639。 第 17 次重复,16 次迭代,总距离 = 114.639。 第 18 次重复,2 次迭代,总距离 = 114.639。 第 19 次重复,3 次迭代,总距离 = 114.639。 第 20 次重复,2 次迭代,总距离 = 114.639。 距离的最佳总和 = 114.639


3.2 可视化聚类结果(二维)

如数据已降维为 2D(如 PCA),可直接绘图:

% 此处使用 PCA score 中前两主成分
[~, score] = pca(X);

figure;
gscatter(score(:,1), score(:,2), idx, 'rgb', 'o', 6);
xlabel('PC1'); ylabel('PC2');
title('K-Means聚类结果(投影至前两主成分)');
grid on;
Pasted image 20250513130552

若未降维,可选择任意两维进行可视化:

figure;
gscatter(X(:,1), X(:,2), idx, 'rgb', 'o', 6);
xlabel('SST (标准化)'); ylabel('Salinity (标准化)');
title('K-Means聚类结果示意');
grid on;

3.3 评价聚类效果:肘部法则与轮廓系数

① 肘部法则(SSE vs. K)

% 计算不同K值下的总误差平方和
K_range = 2:8;
SSE = zeros(size(K_range));

for i = 1:length(K_range)
    [~, ~, sumd_tmp] = kmeans(X, K_range(i), ...
        'Distance', 'sqeuclidean', ...
        'Replicates', 10, ...
        'Start', 'plus');
    SSE(i) = sum(sumd_tmp);
end

figure;
plot(K_range, SSE, '-o');
xlabel('聚类数 K');
ylabel('总平方误差 SSE');
title('肘部法则:K与SSE关系');
grid on;

拐点即为推荐的最优 K 值,通常落在 SSE 降速变缓处。

Pasted image 20250513130621

② 平均轮廓系数(Silhouette)

% 使用当前 K 值绘制轮廓图
figure;
silhouette(X, idx, 'sqeuclidean');
title(['K = ' num2str(K) ' 聚类的轮廓图']);
Pasted image 20250513130749

轮廓系数取值范围为 [−1,1][-1, 1],越接近 1 表示簇内一致性好、簇间区分明显。若多数样本 silhouette 值 < 0,说明当前簇划分不合适。


3.4 聚类结果解释与返回整合

可将聚类结果与原始数据合并,便于后续统计分析与图形绘制:

T_result = T_filtered;
T_result.Cluster = idx;
% 只对数值列执行分组统计(排除字符串或分类变量)
% 手动选择数值型列
numericVars = {'SST', 'Salinity', 'Chl_a'};

% 提取数值列子表
T_numeric = T_result(:, [numericVars, {'Cluster'}]);

% 使用 grpstats 分组统计
stats = grpstats(T_numeric, 'Cluster', {'mean', 'std'});
disp(stats);
 Cluster    GroupCount    mean_SST    std_SST    mean_Salinity    std_Salinity    mean_Chl_a    std_Chl_a
 _______    __________    ________    _______    _____________    ____________    __________    _________
 1       1          100         12.084      1.0471       33.457          0.41433         1.3744       0.27819 
 2       2          101         17.864     0.96036       34.509          0.28554        0.71539       0.21713 
 3       3           99         8.0138      1.5933       31.788          0.48217           2.42       0.46745 

小结与下一步预告

本节完成了基于标准化海洋生态观测数据的 K‑Means 聚类分析,核心步骤包括:

  • 聚类模型拟合与参数优化;
  • 可视化结果呈现(主成分空间或特征空间);
  • 聚类结构质量评估(SSE 与 silhouette);
  • 聚类结果与数据整合用于后续统计检验。

在实际应用中,如发现 K‑Means 无法有效区分非凸形簇或处理离群样本,则应考虑密度或概率模型方法。下一节我们将转入 Part II – 层次聚类(Hierarchical Clustering),介绍如何利用树状图构建多尺度结构,并解释其在空间结构分析与生态谱系推断中的应用。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇