1. K-means算法实现与评价指标全解析
在数据分析和机器学习领域,聚类算法是最基础也最常用的技术之一。今天我要分享的是一个基于MATLAB的K-means算法完整实现,不仅包含核心聚类功能,还集成了多种评价指标计算和可视化模块。这个实现特别适合需要快速验证聚类效果的研究人员和工程师使用。
1.1 为什么选择K-means算法
K-means算法因其简单高效而广受欢迎,特别适合处理数值型数据的聚类问题。它的核心思想是通过迭代优化,将数据点分配到K个簇中,使得每个数据点到其所属簇中心的距离平方和最小。在实际应用中,我经常用它来做客户分群、图像分割等任务。
这个MATLAB实现有几个亮点:
- 完整实现了K-means算法核心逻辑
- 集成了三种常用的聚类评价指标
- 提供了直观的可视化功能
- 代码结构清晰,易于扩展
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 代码结构与核心实现
2.1 数据生成与预处理
matlab复制%% 数据生成与预处理
rng(42); % 固定随机种子
data = [mvnrnd([1,2], eye(2), 100);
mvnrnd([5,6], eye(2), 100);
mvnrnd([9,4], eye(2), 100)]; % 生成3类数据
% 数据标准化
data = zscore(data);
这段代码首先生成了三组二维高斯分布的数据,每组100个样本点,分别以(1,2)、(5,6)和(9,4)为中心。使用rng(42)固定随机种子可以确保每次运行结果一致,这在算法调试阶段非常有用。
数据标准化是聚类分析中不可忽视的一步。这里使用zscore函数将数据标准化为均值为0、标准差为1的分布。这一步很重要,因为:
- K-means算法对特征的尺度敏感
- 不同量纲的特征会影响距离计算
- 标准化后各特征对聚类结果的贡献更加均衡
提示:在实际项目中,如果数据包含异常值,建议先进行异常值处理再进行标准化,否则异常值会影响标准化结果。
2.2 K-means核心算法实现
matlab复制function [idx, centroids, sse] = run_kmeans(data, k, numRuns, distance)
[n, ~] = size(data);
bestSSE = inf;
bestIdx = [];
bestC = [];
for run = 1:numRuns
% 初始化质心
centroids = data(randperm(n,k), :);
% 迭代优化
prevC = centroids;
for iter = 1:100
% 分配样本
distances = pdist2(data, centroids, distance);
[~, idx] = min(distances, [], 2);
% 更新质心
for i = 1:k
centroids(i,:) = mean(data(idx==i,:), 1);
end
% 收敛判断
if norm(centroids - prevC) < 1e-5
break;
end
prevC = centroids;
