基于Kohonen包的SOM映射分析求助附代码及参考教程
获取Kohonen SOM的数值分析结果
嘿,我看到你正在用R的kohonen包做自组织映射(SOM)分析,想要获取映射的数值分析结果对吧?我来一步步帮你搞定,先把代码整理补全,再教你提取关键的数值输出:
第一步:整理并补全你的代码
你提供的数据是截断的,我先帮你搭好可运行的代码框架(后续替换成你实际的完整数据集即可):
# 加载kohonen包 require(kohonen) # 构造完整数据矩阵(把你截断的部分补全到这里) data <- matrix( c(6, 6, 80, 280, 404, 0, 158, 158197, 158197233, 6, 13, 80, 280, 404, 0, 158, 158197, 158197233, 6, 13, 80, 283, 404, 0, 158, 158197, 158197233, 6, 35, 80, 321, 301, 0, 158, 158197, 158197233, 6, 35, 80, 3131, 200, 0, 158, 158197, 158197233, 6, 35, 80, 20073, 200, 0, 158, 158197, 158197233), nrow = 6, byrow = TRUE # 根据你实际的数据行数调整这个参数 ) # 重点!SOM对特征尺度敏感,必须先标准化数据 scaled_data <- scale(data) # 训练SOM模型(参数可以根据你的需求调整) som_model <- som(scaled_data, grid = somgrid(xdim = 5, ydim = 5, topo = "hexagonal"), # 六边形网格,大小可改 rlen = 100, # 迭代次数,一般100-500足够 alpha = c(0.05, 0.01)) # 初始到最终的学习率
第二步:提取核心数值分析结果
1. 神经元的权重(聚类中心原型)
这是SOM最核心的数值结果,每个神经元对应一个“聚类中心”,包含所有特征的标准化后取值:
# 获取所有神经元的权重矩阵 neuron_weights <- som_model$codes # 查看前5个神经元的权重,方便快速浏览 head(neuron_weights, 5)
2. 每个样本的神经元分配
知道你的每个数据点被映射到了哪个神经元,这是后续细分分析的基础:
# 获取每个样本对应的神经元ID sample_assignments <- som_model$unit.classif # 打印结果,每个数字代表对应行样本的神经元编号 print(sample_assignments)
3. 神经元的样本计数
统计每个神经元下有多少个样本,能帮你快速了解哪些聚类是“大簇”,哪些是“小簇”:
# 计算每个神经元的样本数量 neuron_counts <- table(sample_assignments) print(neuron_counts)
4. 训练过程的误差指标
这两个指标能帮你评估模型效果:
- 量化误差:所有样本到对应神经元的平均距离,越小说明聚类越紧凑
- 拓扑误差:反映SOM的拓扑保持性,越小说明相似样本被映射到相邻神经元的比例越高
# 查看最终的误差值 cat("拓扑误差:", som_model$topo.error, "\n") cat("最终量化误差:", som_model$quant.error[length(som_model$quant.error)], "\n") # 如果想看迭代过程中量化误差的变化趋势,可以画个线图 plot(som_model$quant.error, type = "l", xlab = "迭代次数", ylab = "量化误差")
5. 特征的重要性排序
如果你想知道哪些特征对聚类的影响最大,可以计算每个特征在所有神经元权重中的范围(最大值减最小值),范围越大说明这个特征越能区分不同聚类:
# 计算每个特征的权重范围 feature_importance <- apply(som_model$codes, 2, function(x) max(x) - min(x)) # 按重要性从高到低排序 sort(feature_importance, decreasing = TRUE)
小提醒
- 一定要记得标准化数据!如果你的特征尺度差异很大(比如你数据里的158197233和0),不标准化的话大数值特征会完全主导聚类结果,得到的结果毫无意义。
- 如果你的数据集很大,可以适当增加迭代次数
rlen,或者调整网格大小xdim/ydim来获得更细致的聚类。
内容的提问来源于stack exchange,提问作者caroline
相关产品推荐
相关产品推荐

