SOMbrero包聚类与节点信息添加至训练数据集技术问询
搞定SOMbrero聚类信息与训练数据的合并
嘿,我来帮你把SOMbrero生成的聚类编号、节点X/Y坐标和训练数据集完美整合到一起!结合你已经完成的提取工作,咱们一步步来:
1. 先确认你已有的基础操作(基于iris数据集示例)
假设你已经完成了SOM训练和基础信息提取,代码大概是这样:
library(SOMbrero) data(iris) # 预处理数据(标准化) iris_scaled <- scale(iris[, 1:4]) # 训练SOM模型 my_som <- trainSOM(x.data = iris_scaled, dimension = c(5, 5)) # 你已经提取的内容 cluster_ids <- getClusters(my_som) # 每个样本的聚类编号 node_ids <- my_som$clustering$which.node # 每个样本对应的SOM节点ID prototypes <- my_som$prototypes # 节点原型(你已经搞定的部分)
2. 提取每个样本对应的节点X/Y坐标
SOMbrero的模型对象里已经存了所有节点的坐标信息,咱们只需要把每个样本的节点ID和坐标对应上就行:
# 获取SOM网格中所有节点的坐标 node_coords <- my_som$parameters$grid$coord # 给坐标列起个清晰的名字 colnames(node_coords) <- c("node_x", "node_y") # 根据每个样本的node_id,匹配对应的坐标 sample_node_coords <- node_coords[node_ids, ]
3. 合并所有信息到原训练数据集
现在把聚类编号、节点ID、节点坐标和原数据集(比如iris)合并,两种方法任选:
方法1:用基础R的cbind
result_data <- cbind( iris, # 原训练数据集 cluster_id = cluster_ids, # 聚类编号 node_id = node_ids, # 节点ID sample_node_coords # 节点X/Y坐标 )
方法2:用dplyr(更直观,适合数据框操作)
library(dplyr) result_data <- iris %>% mutate( cluster_id = cluster_ids, node_id = node_ids, node_x = sample_node_coords[, "node_x"], node_y = sample_node_coords[, "node_y"] )
验证一下
你可以用head(result_data)看看前几行数据,应该能看到原iris的列后面跟着cluster_id、node_id、node_x、node_y这几列,完美对应每个样本的SOM相关信息!
不管你用的是矩形还是六边形网格,这个方法都能正常工作,因为grid$coord会自动返回对应网格类型的坐标值。
内容的提问来源于stack exchange,提问作者cs0815
相关产品推荐
相关产品推荐

