2026/4/18 16:34:42
网站建设
项目流程
网站建设和软件开发哪个有前途,wordpress sae 主题,哈尔滨网站设计快速建站,免费的会员卡管理软件自组织特征映射(SOM)的数据聚类程序。
matlab程序。
数据格式为excel,聚类标签可显示在图上。最近在折腾数据聚类的时候重新捡起了自组织特征映射#xff08;SOM#xff09;这个老伙计。作为神经网络家族里擅长无监督学习的成员#xff0c;它在数据可视化方面确实有一套。今…自组织特征映射(SOM)的数据聚类程序。 matlab程序。 数据格式为excel,聚类标签可显示在图上。最近在折腾数据聚类的时候重新捡起了自组织特征映射SOM这个老伙计。作为神经网络家族里擅长无监督学习的成员它在数据可视化方面确实有一套。今天咱们用MATLAB整一个能处理Excel数据的SOM聚类程序顺便把标签直接怼到图上让结果看起来更直观。先准备数据环境。假设我们有个sales_data.xlsx里面是某商超12个月的各品类销售指标。读取数据时别直接用xlsread了试试MATLAB 2019b之后更香的readtableraw_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万条时建议启用GPU加速train(net,X,[],useParallel,yes)六边形网格比矩形网格的边界更清晰用plotsomplanes观察各特征在网格上的分布能发现哪些指标对聚类贡献大这套方案在分析客户分群、库存分类时特别管用。曾经用这个方法处理过2000SKU的库存数据配合颜色深浅表示库存周转率一眼就能看出哪些品类该清仓了。下次遇到需要解释为什么这些数据被分到一组的时候试试把特征平面图贴给业务部门看比单纯给聚类编号直观多了。