K-means聚类算法原理与MATLAB工程实践
1. K-means算法基础与MATLAB实现价值K-means作为无监督学习中最经典的聚类算法其核心思想是通过迭代计算将数据样本划分为K个簇。算法执行过程包含三个关键阶段初始化中心点、分配样本到最近中心、重新计算中心点位置。MATLAB的矩阵运算优势使其成为实现该算法的理想工具——其内置的pdist2函数可高效计算欧氏距离kmeans函数更提供了完整的算法实现但本文将展示从零构建的过程。在实际工程应用中自行实现K-means而非直接调用库函数具有独特价值。以工业质检为例当需要处理特殊距离度量如余弦相似度或定制化中心点更新规则时自主实现的灵活性就显现出来。我曾在一个陶瓷表面缺陷检测项目中通过修改中心点权重计算公式使算法对微小划痕的识别率提升了12%。注意MATLAB版本差异可能导致函数兼容性问题建议使用R2019b及以上版本运行本文代码。若遇到未定义函数错误需检查Statistics and Machine Learning Toolbox是否安装。2. 数据准备与算法实现全流程2.1 模拟数据生成与可视化我们首先生成具有明显簇结构的测试数据。以下代码创建三个高斯分布簇每个簇包含100个二维样本点rng(42); % 固定随机种子保证可重复性 cluster1 mvnrnd([1, 3], [0.3, 0; 0, 0.3], 100); cluster2 mvnrnd([4, 1], [0.4, 0.1; 0.1, 0.4], 100); cluster3 mvnrnd([2, 5], [0.2, -0.1; -0.1, 0.2], 100); data [cluster1; cluster2; cluster3]; figure; scatter(data(:,1), data(:,2), 15, filled); title(原始数据分布); xlabel(特征1); ylabel(特征2);2.2 核心算法实现步骤完整的K-means实现包含以下关键函数function [centroids, labels] my_kmeans(data, k, max_iter) % 初始化随机选择k个样本作为初始中心点 centroids datasample(data, k, Replace, false); for iter 1:max_iter % 分配阶段计算每个样本到各中心点的距离 distances pdist2(data, centroids); [~, labels] min(distances, [], 2); % 更新阶段重新计算簇中心 new_centroids zeros(k, size(data,2)); for i 1:k new_centroids(i,:) mean(data(labelsi, :), 1); end % 终止条件判断 if norm(new_centroids - centroids) 1e-6 break; end centroids new_centroids; end end在图像分割实际项目中我发现初始中心点的随机选择可能导致结果不稳定。改进方案是采用k-means初始化策略% k-means初始化改进代码 centroids zeros(k, size(data,2)); centroids(1,:) datasample(data, 1); % 随机选择第一个中心 for i 2:k % 计算每个样本到最近中心的距离平方 dists pdist2(data, centroids(1:i-1,:)).^2; min_dists min(dists, [], 2); % 按距离加权概率选择下一个中心 prob min_dists/sum(min_dists); centroids(i,:) datasample(data, 1, Weights, prob); end3. 聚类效果评价指标体系实现3.1 内部评价指标计算轮廓系数(Silhouette Coefficient)是最常用的内部评价指标反映样本与同簇和其他簇的相似度对比function s silhouette_score(data, labels) k max(labels); s_values zeros(size(data,1), 1); for i 1:length(s_values) % 计算a(i)样本i到同簇其他样本的平均距离 same_cluster data(labels labels(i), :); a_i mean(pdist2(data(i,:), same_cluster)); % 计算b(i)样本i到其他各簇的最小平均距离 other_clusters setdiff(1:k, labels(i)); b_i inf; for c other_clusters cluster_points data(labels c, :); current_dist mean(pdist2(data(i,:), cluster_points)); if current_dist b_i b_i current_dist; end end s_values(i) (b_i - a_i) / max(a_i, b_i); end s mean(s_values); end在电商用户分群项目中我们发现当轮廓系数低于0.25时聚类结果往往不符合业务预期。此时需要调整特征工程方案或重新考虑聚类数目。3.2 外部评价指标实现当存在真实标签时调整兰德指数(Adjusted Rand Index)能客观评估聚类效果function ari adjusted_rand_index(true_labels, pred_labels) % 构建 contingency table cont_table zeros(max(true_labels), max(pred_labels)); for i 1:length(true_labels) cont_table(true_labels(i), pred_labels(i)) ... cont_table(true_labels(i), pred_labels(i)) 1; end % 计算各项组合数 sum_comb_a sum(arrayfun((x) nchoosek(x,2), sum(cont_table,2))); sum_comb_b sum(arrayfun((x) nchoosek(x,2), sum(cont_table,1))); total_comb nchoosek(length(true_labels), 2); sum_comb_cont sum(arrayfun((x) nchoosek(x,2), cont_table(:))); % 计算ARI ari (sum_comb_cont - (sum_comb_a*sum_comb_b)/total_comb) / ... (0.5*(sum_comb_a sum_comb_b) - (sum_comb_a*sum_comb_b)/total_comb); end4. 工程实践中的优化技巧4.1 大数据量处理方案当样本量超过10万时常规实现会面临内存问题。可采用以下优化策略批处理模式将数据分块加载每次迭代只处理部分数据batch_size 10000; for batch_start 1:batch_size:size(data,1) batch_end min(batch_startbatch_size-1, size(data,1)); batch_data data(batch_start:batch_end, :); % 仅对当前批次计算距离 batch_dist pdist2(batch_data, centroids); [~, batch_labels] min(batch_dist, [], 2); % 更新标签和统计量 labels(batch_start:batch_end) batch_labels; % ...后续统计更新操作 end距离计算加速利用MATLAB的并行计算工具箱parfor i 1:size(data,1) % 并行计算每个样本的距离 distances(i,:) sum((data(i,:) - centroids).^2, 2); end4.2 特征标准化与降维不同量纲的特征会严重影响聚类效果。必须进行标准化处理% Z-score标准化 data_normalized zscore(data); % 或者最大最小值归一化 data_normalized (data - min(data)) ./ (max(data) - min(data));对于高维数据建议先进行PCA降维[coeff, score, latent] pca(data); explained cumsum(latent)./sum(latent); k_dim find(explained 0.95, 1); % 保留95%方差的维度 data_reduced score(:,1:k_dim);在金融风控特征分析中我们发现将原始37维特征降至8维后不仅运行时间缩短60%轮廓系数还提高了0.15。4.3 最佳K值确定方法肘部法则(Elbow Method)的实现与可视化k_range 1:8; inertia zeros(size(k_range)); for i 1:length(k_range) [~, ~, sumd] kmeans(data, k_range(i)); inertia(i) sum(sumd); end figure; plot(k_range, inertia, -o); xlabel(簇数量K); ylabel(簇内平方和); title(肘部法则确定最佳K值);更精确的Gap Statistic方法实现function best_k gap_statistic(data, max_k, B) % 生成参考分布均匀分布 ref_data zeros(size(data)); for d 1:size(data,2) ref_data(:,d) unifrnd(min(data(:,d)), max(data(:,d)), size(data,1),1); end % 计算实际数据和参考数据的log(inertia) logW zeros(1, max_k); logW_ref zeros(1, max_k); for k 1:max_k [~, ~, sumd] kmeans(data, k); logW(k) log(sum(sumd)); ref_logW zeros(1,B); for b 1:B [~, ~, ref_sumd] kmeans(ref_data, k); ref_logW(b) log(sum(ref_sumd)); end logW_ref(k) mean(ref_logW); end % 计算gap值 gap logW_ref - logW; [~, best_k] max(gap); % 可视化 figure; plot(1:max_k, gap, -o); xlabel(簇数量K); ylabel(Gap值); title(Gap Statistic分析); end

相关新闻

Unity透明视频播放全攻略:告别毛边,实现像素级融合

Unity透明视频播放全攻略:告别毛边,实现像素级融合

1. 项目概述:为什么Unity播放透明视频是个“技术活”? 做游戏或者做交互应用的朋友,尤其是做UI动效、技能特效或者需要将动态设计无缝融入3D场景的开发者,肯定都遇到过这个需求:怎么在Unity里播放一个带透明通道的视频…

2026/8/4 11:55:00 阅读更多 →
时间序列预测核心:滑动窗口原理、参数与实战全解析

时间序列预测核心:滑动窗口原理、参数与实战全解析

1. 从“点”到“线”:为什么滑动窗口是时间序列的基石如果你刚开始接触时间序列预测,无论是用ARIMA、LSTM还是Prophet,可能都听过一个词:滑动窗口。很多教程会直接甩给你一段代码,告诉你“把数据这样切一下就能喂给模型…

2026/8/4 11:55:00 阅读更多 →
TVS 二极管工作机理、选型方法及在机器人与车载领域的工程应用研究

TVS 二极管工作机理、选型方法及在机器人与车载领域的工程应用研究

摘要瞬态电压抑制二极管(TVS)作为核心电磁兼容防护器件,凭借纳秒级响应速度、高瞬态功率吸收能力与精准钳位特性,已成为电力电子系统抵御浪涌冲击、抑制过压尖峰的标准配置。随着人形机器人、四足机器人、新能源车载电子产业快速扩…

2026/8/4 11:55:00 阅读更多 →

最新新闻

告别B站下载限制:bilibili-downloader 让4K大会员视频轻松离线

告别B站下载限制:bilibili-downloader 让4K大会员视频轻松离线

告别B站下载限制:bilibili-downloader 让4K大会员视频轻松离线 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否曾遇…

2026/8/4 12:44:26 阅读更多 →
MCP协议安全风险解析与AI系统互联防护

MCP协议安全风险解析与AI系统互联防护

1. MCP协议:AI生态的"USB-C接口"为何暗藏危机?在AI技术快速发展的今天,各种AI系统间的互联互通变得愈发重要。MCP协议(Machine Communication Protocol)作为AI系统间的"通用语言",其作…

2026/8/4 12:44:26 阅读更多 →
Debug三年悟了:程序员最好的状态修复,是去一次巴厘岛

Debug三年悟了:程序员最好的状态修复,是去一次巴厘岛

程序员的通病,从来不是技术不够,是状态卡顿 做技术久了会发现一个很扎心的现象:很多时候写不出代码、解不出Bug、逻辑梳理混乱,不是技术能力退化,是身心内存溢出。 日复一日的需求迭代、线上告警、深夜抢修、需求变更&…

2026/8/4 12:44:26 阅读更多 →
WSA Toolbox:3分钟掌握Windows 11安卓应用一键安装技巧 [特殊字符]

WSA Toolbox:3分钟掌握Windows 11安卓应用一键安装技巧 [特殊字符]

WSA Toolbox:3分钟掌握Windows 11安卓应用一键安装技巧 🚀 【免费下载链接】wsa-toolbox A Windows 11 application to easily install and use the Windows Subsystem For Android™ package on your computer. 项目地址: https://gitcode.com/gh_mir…

2026/8/4 12:44:26 阅读更多 →
数据库运维怎么防拖库?DBA 双因素登录 + 动态凭据轮换的 ASP 实战

数据库运维怎么防拖库?DBA 双因素登录 + 动态凭据轮换的 ASP 实战

数据是企业最值钱的资产,而数据库往往是"最后一道门"。但现实里,数据库的防护却最脆弱:一个 root 口令全公司几个人共用、口令三年不换、DBA 离职能直接拖走整库……近年来大大小小的"拖库"事件,几乎都绕不开…

2026/8/4 12:43:25 阅读更多 →
堡垒机登录怎么加双因素?运维账号口令托管不落地 + 会话审计的 ASP 对接实战

堡垒机登录怎么加双因素?运维账号口令托管不落地 + 会话审计的 ASP 对接实战

运维安全事故里,最致命的一类往往不是外部黑客,而是内部特权账号失控:共享 root 口令、口令写在 Excel 里、离职员工口令不回收、操作无审计……一旦出事,溯源都溯不到人。堡垒机(运维安全审计系统)本是解决…

2026/8/4 12:43:25 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →