如何评估鸢尾花数据集上Self-Organizing Map(SOM)的聚类性能?
SOM聚类性能评估方案
关于ARI评估的合理性
ARI可以用来衡量聚类结果与真实标签的一致性,但你当前的用法存在问题:你直接将每个SOM神经元视为一个簇(10x10网格对应100个簇),而鸢尾花仅有3个真实类别,簇数差异过大时,ARI必然趋近于0——这是因为ARI的核心是衡量两个簇划分的重叠度,当簇数相差悬殊,随机划分的ARI也接近0,所以你的结果是合理的,但这是评估方式的问题,并非SOM本身的问题。
正确的SOM性能评估流程
1. 先对SOM神经元进行二次聚类
SOM的本质是将样本映射到二维网格的神经元原型上,你需要先把相似的神经元聚成与真实类别数(3个)匹配的簇,再将样本的神经元归属映射到这个簇划分上,之后再计算ARI:
% 提取SOM所有神经元的权重向量 neuron_weights = net.IW{1}; % 用k-means对神经元聚类,指定簇数为3(和鸢尾花真实类别一致) [idx_neurons, ~] = kmeans(neuron_weights, 3); % 将每个样本对应的神经元索引映射为最终簇标签 sample_cluster_labels = idx_neurons(assignment); % 计算调整兰德指数 ari = adjustedRandIndex(true_labels, sample_cluster_labels);
2. 专属SOM的拓扑与量化指标
除了和真实标签对比的一致性指标,SOM还有自身特有的评估维度:
- 量化误差:计算每个样本到其最佳匹配神经元(BMU)权重的平均距离,数值越小说明SOM对样本的拟合精度越高:
quantization_error = mean(min(pdist2(X, neuron_weights'), [], 2)); - 拓扑误差:统计有多少样本的BMU和次佳匹配神经元在SOM网格上不相邻,数值越小说明SOM更好地保留了原始数据的拓扑结构(需自行实现或借助专用工具箱)。
- 可视化评估:调用
plotsom(net)绘制SOM神经元网格,观察不同真实类别的样本在网格上的分布是否集中、边界是否清晰,这是SOM最直观的评估方式。
大网格下的问题说明
当使用10x10这类大网格时,神经元数量远多于真实类别数,直接用神经元索引作为簇标签计算ARI没有实际意义——簇数差异过大导致一致性指标失效。必须先对神经元做二次聚类,将簇数调整到与真实类别匹配后,再计算一致性指标才合理。
内容的提问来源于stack exchange,提问作者CodeGuy
相关产品推荐
相关产品推荐

