1. 聚类算法概述与Matlab实现
聚类分析是数据挖掘和机器学习领域的重要技术手段,它能够将数据集中的对象分组,使得同一组(称为簇)内的对象彼此相似,而不同组之间的对象差异较大。在Matlab环境中,我们可以方便地实现多种经典聚类算法,包括K-means、模糊C-means、层次聚类、神经网络聚类和高斯混合模型等。这些算法各有特点,适用于不同类型的数据集和分析需求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 五种主流聚类算法原理与实现
2.1 K-means聚类算法
K-means是最经典也是最常用的聚类算法之一,其核心思想是通过迭代将数据点划分到K个簇中,使得每个数据点都属于离它最近的均值(即聚类中心)对应的簇。
算法实现步骤:
- 随机选择K个数据点作为初始聚类中心
- 计算每个数据点到各聚类中心的距离,并将其分配到最近的簇
- 重新计算每个簇的均值作为新的聚类中心
- 重复步骤2-3,直到聚类中心不再变化或达到最大迭代次数
matlab复制% K-means聚类Matlab实现示例
data = rand(100,2); % 生成100个二维随机数据点
k = 3; % 设置聚类数量
[idx, centers] = kmeans(data, k);
% 可视化聚类结果
figure;
gscatter(data(:,1), data(:,2), idx);
hold on;
plot(centers(:,1), centers(:,2), 'kx', 'MarkerSize', 15, 'LineWidth', 3);
title('K-means聚类结果');
legend('Cluster 1', 'Cluster 2', 'Cluster 3', 'Centroids');
关键参数说明:
k:预设的聚类数量,需要根据数据特点或经验确定distance:距离度量方式,常用欧氏距离('sqeuclidean')或曼哈顿距离('cityblock')replicates:重复运行次数,避免局部最优解
提示:K-means对初始中心点敏感,建议设置较大的replicates值(如10-20),让算法多次运行选择最佳结果。
2.2 模糊C-means聚类算法
模糊C-means(FCM)是K-means的模糊扩展版本,允许数据点以不同的隶属度属于多个簇,更适合处理边界模糊的数据集。
算法特点:
- 引入隶属度矩阵,表示每个数据点对各簇的归属程度
- 使用模糊因子m控制聚类的模糊程度(m>1)
- 通过最小化目标函数迭代优化隶属度和聚类中心
matlab复制% 模糊C-means聚类Matlab实现
data = rand(100,2); % 测试数据
options = [2, 100, 1e-5, 0]; % [模糊因子m, 最大迭代次数, 收敛阈值, 显示信息]
[centers, U] = fcm(data, 3, options);
% 根据最大隶属度确定数据点所属簇
[~, idx] = max(U);
% 可视化结果
figure;
gscatter(data(:,1), data(:,2), idx);
hold on;
plot(centers(:,1), centers(:,2), 'kx', 'MarkerSize', 15, 'LineWidth', 3);
title('模糊C-means聚类结果');
参数选择建议:
- 模糊因子m通常取1.5-3.0,值越大聚类越模糊
- 收敛阈值一般设为1e-5到1e-6
- 最大迭代次数建议100-200次
2.3 层次聚类算法
层次聚类通过构建树状图(dendrogram)来展示数据的层次结构,不需要预先指定聚类数量。Matlab中提供了linkage和cluster函数实现层次聚类。
实现步骤:
- 计算数据点间的距离矩阵
- 使用linkage函数构建聚类树
- 通过cluster函数切割聚类树得到最终聚类结果
matlab复制% 层次聚类Matlab实现
data = rand(100,2); % 测试数据
dist = pdist(data); % 计算距离矩阵
tree = linkage(dist, 'average'); % 使用平均链接法构建聚类树
% 可视化树状图
figure;
dendrogram(tree);
title('层次聚类树状图');
% 切割树状图得到聚类结果
idx = cluster(tree, 'maxclust', 3); % 指定分为3类
% 可视化聚类结果
figure;
gscatter(data(:,1), data(:,2), idx);
title('层次聚类结果');
链接方法选择:
- 'single':单链接,计算簇间最近点距离
- 'complete':全链接,计算簇间最远点距离
- 'average':平均链接,计算簇间平均距离(常用)
- 'ward':Ward方法,最小化簇内方差
2.4 高斯混合模型聚类
高斯混合模型(GMM)假设数据由多个高斯分布混合生成,通过EM算法估计各高斯成分的参数,实现基于概率的软聚类。
Matlab实现:
matlab复制% 高斯混合模型聚类
data = randn(100,2); % 生成测试数据
data(1:50,:) = data(1:50,:) + 2; % 偏移部分数据
data(51:100,:) = data(51:100,:) - 2; % 偏移另一部分数据
gmm = fitgmdist(data, 2); % 拟合2成分GMM模型
idx = cluster(gmm, data); % 获取聚类结果
% 可视化聚类结果
figure;
gscatter(data(:,1), data(:,2), idx);
hold on;
ezcontour(@(x,y)pdf(gmm,[x y]), [-5 5], [-5 5]);
title('高斯混合模型聚类结果');
模型参数说明:
- 协方差矩阵类型:'full'(完全协方差)、'diagonal'(对角协方差)、'shared'(共
