You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:59:24