本文所述的MATLAB代码实现了完整的K-Means聚类算法演示,适用于数据聚类学习、算法验证。代码通过模拟数据生成、聚类分析、结果可视化及误差评估,直观展示了K-Means的工作原理和性能。
程序简介
代码核心功能
-
数据生成
- 创建4个高斯分布簇(共200个样本点)
- 每个簇具有不同中心点
[3,3]
,[-3,3]
,[3,-3]
,[-3,-3]
和标准差 - 数据合并后随机打乱顺序,模拟真实数据集
-
K-Means聚类
- 使用MATLAB内置
kmeans()
函数执行聚类 - 关键参数:
k=4
(指定簇数量)MaxIter=100
(最大迭代次数)Replicates=5
(重复聚类取最优解)
- 输出聚类标签、质心坐标、簇内误差
- 使用MATLAB内置
-
可视化分析
- 聚类结果图:散点着色区分簇,黑色"X"标记质心
- 误差收敛图:展示迭代过程中总误差的下降过程
- 数据分布对比:
- 原始数据分布(相同颜色)
- 真实标签分布(不同符号区分)
- 聚类结果与真实标签对比图
-
量化评估
- 计算并输出:
- 总误差:
totalError = sum(sumd)
- 各簇内距离误差:
disp(sumd)
- 总误差:
- 计算并输出:
关键特性
- 可复现性:通过
rng()
固定随机种子 - 抗局部最优:
Replicates
参数多次运行取最优解 - 直观验证:可视化对比人工生成数据与聚类结果
- 算法诊断:误差收敛曲线验证迭代优化效果
运行结果
原始数据:
分类结果:
结果输出:
matlab代码
程序结构
部分代码
% K-Means 聚类 MATLAB 示例代码
clc; clear; close all;
rng(0);
%% 生成随机数据
% 数据点数
numPoints = 200;
% 随机生成 4 个簇的数据
rng(1); % 设置随机种子以便复现
data1 = 3*randn(numPoints/4, 2) + [3, 3];
data2 = 2*randn(numPoints/4, 2) + [-3, 3];
data3 = randn(numPoints/4, 2) + [3, -3];
data4 = randn(numPoints/4, 2) + [-3, -3];
% 合并数据
data = [data1; data2; data3; data4];
% 打乱数据顺序
data = data(randperm(size(data, 1)), :);
完整代码获取
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者