news 2026/3/16 10:01:43

SOM聚类Matlab程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SOM聚类Matlab程序

自组织特征映射(SOM)的数据聚类程序。 matlab程序。 数据格式为excel,聚类标签可显示在图上。

最近在折腾数据聚类的时候重新捡起了自组织特征映射(SOM)这个老伙计。作为神经网络家族里擅长无监督学习的成员,它在数据可视化方面确实有一套。今天咱们用MATLAB整一个能处理Excel数据的SOM聚类程序,顺便把标签直接怼到图上,让结果看起来更直观。

先准备数据环境。假设我们有个"sales_data.xlsx",里面是某商超12个月的各品类销售指标。读取数据时别直接用xlsread了,试试MATLAB 2019b之后更香的readtable:

raw_data = readtable('sales_data.xlsx'); data_matrix = table2array(raw_data(:,2:end)); % 假设首列是月份名称 feature_names = raw_data.Properties.VariableNames(2:end);

数据归一化这个步骤千万别省,特别是当特征量纲差异大的时候。个人习惯用mapminmax做区间缩放,比z-score更抗异常值:

[normalized_data, ps] = mapminmax(data_matrix', 0, 1); % 转置适应函数格式 normalized_data = normalized_data'; % 再转回来保持样本行方向

接下来构建SOM网络。这里有个小技巧:先用默认参数快速试跑,再根据收敛情况调整。初始网络结构设置为5x5的六边形网格,这个尺寸适合大多数中小型数据集:

net = selforgmap([5 5], 'grid', 'hextop', 'linkdist'); net.trainParam.epochs = 100; % 先跑100轮看效果 [net, tr] = train(net, normalized_data');

训练完成后,通过权值矩阵观察聚类情况。每个神经元的权向量代表该簇的中心特征。用plotsomnd(net)可以看拓扑结构,但咱们更关心实际数据点的归属:

% 获取每个样本所属的神经元编号 outputs = net(normalized_data'); cluster_indices = vec2ind(outputs); % 关联原始数据标签 month_labels = table2cell(raw_data(:,1));

这时候直接上plotsomhits虽然能看分布,但标签显示得不够直观。自己动手画个带文字标注的版本:

figure; plotsomhits(net, normalized_data'); hold on % 获取神经元位置坐标 pos = net.layers{1}.positions; for i = 1:length(month_labels) text(pos(cluster_indices(i),1)+0.1, pos(cluster_indices(i),2)+0.1,... month_labels{i}, 'FontSize',8, 'Color','k'); end hold off

运行后可能会发现某些神经元节点挤满了标签,这时候可以调两个地方:一是增大网格尺寸,二是改用kmeans对权向量做二次聚类。比如用权向量作为初始质心:

w = net.IW{1}; [~, super_clusters] = kmeans(w, 3, 'Start', w(1:3,:)); % 假设想合并为3个大类

最后导出结果到Excel时,记得把原始数据和聚类标签合并保存。这个技巧在处理业务数据时特别实用:

result_table = [raw_data, array2table(cluster_indices,... 'VariableNames',{'SOM_Cluster'})]; writetable(result_table, 'clustered_result.xlsx');

几点实战经验:

  1. 当数据量超过1万条时,建议启用GPU加速(train(net,X,[],'useParallel','yes'))
  2. 六边形网格比矩形网格的边界更清晰
  3. 用plotsomplanes观察各特征在网格上的分布,能发现哪些指标对聚类贡献大

这套方案在分析客户分群、库存分类时特别管用。曾经用这个方法处理过2000+SKU的库存数据,配合颜色深浅表示库存周转率,一眼就能看出哪些品类该清仓了。下次遇到需要解释"为什么这些数据被分到一组"的时候,试试把特征平面图贴给业务部门看,比单纯给聚类编号直观多了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 0:04:10

双重孔隙介质模型煤层热流固瓦斯抽采系统

comsol基于双重孔隙介质模型的煤层热流固瓦斯抽采在煤层气开采过程中,热流固耦合效应是一个不可忽视的因素。COMSOL Multiphysics作为一款强大的多物理场仿真软件,为我们提供了研究这一复杂过程的利器。今天,我们就来聊聊如何用COMSOL的双重孔…

作者头像 李华
网站建设 2026/3/15 15:58:40

悬浮颗粒两相流模拟 本案例基于COMSOL软件模拟了不同密度大小的悬浮颗粒在混合溶液中的流动沉积情况

悬浮颗粒两相流模拟 本案例基于COMSOL软件模拟了不同密度大小的悬浮颗粒在混合溶液中的流动沉积情况,模拟结果如图所示1.密度较大颗粒的沉积情况2.密度较小颗粒悬浮混合情况 3000j 悬浮颗粒在混合液中的舞动总让我想起小时候看妈妈冲芝麻糊——黑芝麻粉沉得快&…

作者头像 李华
网站建设 2026/3/13 21:31:18

初始化飞蛾位置矩阵:3个电站*24小时

电力系统 电动汽车 新能源汽车 充电优化算法 基于飞蛾扑火算法的电动汽车群有序充电优化 使用飞蛾扑火算法求解一个充电策略优化问题。 目标是找到电动汽车充电站的最佳充电策略,以最小化目标函数 [号外][号外]程序都调试运行过!保证程序,仿真…

作者头像 李华
网站建设 2026/3/13 21:23:54

自动化测试专家养成计划:Selenium/Appium/JMeter实战课程深度解析

测试行业的技能进化图谱 随着敏捷开发与DevOps模式的普及,软件测试已从传统的手工验证转向自动化、性能与安全的多维能力要求。2025年,人工智能辅助测试工具与云测平台的成熟,更促使测试人员需持续更新技术栈。本文基于行业调研与岗位能力模…

作者头像 李华
网站建设 2026/3/14 8:38:46

Langchain-Chatchat嵌入网页应用的技术路径

Langchain-Chatchat嵌入网页应用的技术路径 在企业数字化转型的浪潮中,一个现实而棘手的问题逐渐浮现:如何让堆积如山的内部文档——从员工手册到技术规范——真正“活”起来?传统搜索依赖关键词匹配,面对“差旅补贴怎么报”和“出…

作者头像 李华
网站建设 2026/3/15 10:00:23

OSPF协议概述

一、引入①路由设备根据路由表转发数据包,路由表项可通过手动配置和动态路由协议生成;②静态路由比动态路由使用的带宽更少,且不占用CPU资源去计算和分析路由更新。如果网络结构比较简单,只需要配置静态路由即可,但是当…

作者头像 李华