【问题标题】:add clusters and nodes from SOMbrero package to training data将 SOMbrero 包中的集群和节点添加到训练数据中
【发布时间】:2018-02-17 16:36:38
【问题描述】:

我正在使用SOMbrero 包。我想附上这样创建的簇号(取自here):

my.sc <- superClass(iris.som, k=3)

以及 SOM 节点的 X 和 Y 坐标到训练数据集。

在一些使用 kohonen 包的代码中,我创建了这样的集群:

range01 <- function(x){(x-min(x))/(max(x)-min(x))}

ind <- sapply(SubsetData, is.numeric)
SubsetData[ind] <- lapply(SubsetData[ind], range01)

TrainingMatrix <- as.matrix(SubsetData)

GridDefinition <- somgrid(xdim = 4, ydim = 4, topo = "rectangular", toroidal = FALSE)

SomModel <- som(
    data = TrainingMatrix,
    grid = GridDefinition,
    rlen = 10000,
    alpha = c(0.05, 0.01),
    keep.data = TRUE
)

nb <- table(SomModel$unit.classif)
groups = 5
tree.hc = cutree(hclust(d=dist(SomModel$codes[[1]]),method="ward.D2",members=nb),groups)

plot(SomModel, type="codes", bgcol=rainbow(groups)[tree.hc])

add.cluster.boundaries(SomModel, tree.hc)
result <- OrginalData
result$Cluster <- tree.hc[SomModel$unit.classif]
result$X <- SomModel$grid$pts[SomModel$unit.classif,"x"]
result$Y <- SomModel$grid$pts[SomModel$unit.classif,"y"]

write.table(result, file = "FinalData.csv", sep = ",", col.names = NA, quote = FALSE)

PS:

可以在here找到一些使用鸢尾花数据集的示例代码。

PPS:

我对上面引用的代码 iris 代码进行了一些尝试,并认为我已经设法提取了集群、节点 ID 和原型(参见下面的代码)。缺少的是坐标 X 和 Y。我认为它们在这里:

iris.som$parameters$the.grid$coord

代码:

library(SOMbrero)

set.seed(100)
setwd("D:\\RProjects\Clustering")

#iris.som <- trainSOM(x.data=iris[,1:4],dimension=c(10,10), maxit=100000, scaling="unitvar", radius.type="gaussian")
iris.som <- trainSOM(x.data=iris[,1:4],dimension=c(3,3), maxit=100000, scaling="unitvar", radius.type="gaussian")

# perform a hierarchical clustering
## with 3 super clusters
iris.sc <- superClass(iris.som, k=3)
summary(iris.sc)

# compute the projection quality indicators
quality(iris.som)

iris1 <- iris
iris1$Cluster = iris.sc$cluster[iris.sc$som$clustering]
iris1$Node = iris.sc$som$clustering
iris1$Pt1Sepal.Length = iris.sc$som$prototypes[iris.sc$som$clustering,1]
iris1$Pt2Sepal.Width = iris.sc$som$prototypes[iris.sc$som$clustering,2]
iris1$Pt3Petal.Length = iris.sc$som$prototypes[iris.sc$som$clustering,3]
iris1$Pt4Petal.Width = iris.sc$som$prototypes[iris.sc$som$clustering,4]

write.table(iris1, file = "Iris.csv", sep = ",", col.names = NA, quote = FALSE)

【问题讨论】:

    标签: r self-organizing-maps


    【解决方案1】:

    我想我已经使用 iris 示例弄清楚了(请更正/改进代码!-我不流利地使用 R):

    library(SOMbrero)
    
    set.seed(100)
    setwd("D:\\RProjects\\SomBreroClustering")
    
    iris.som <- trainSOM(x.data=iris[,1:4],dimension=c(5,5), maxit=10000, scaling="unitvar", radius.type="letremy")
    
    # perform a hierarchical clustering
    # with 3 super clusters
    iris.sc <- superClass(iris.som, k=3)
    summary(iris.sc)
    
    # compute the projection quality indicators
    quality(iris.som)
    
    iris1 <- iris
    iris1$Cluster = iris.sc$cluster[iris.sc$som$clustering]
    iris1$Node = iris.sc$som$clustering
    iris1$Pt1Sepal.Length = iris.sc$som$prototypes[iris.sc$som$clustering,1]
    iris1$Pt2Sepal.Width = iris.sc$som$prototypes[iris.sc$som$clustering,2]
    iris1$Pt3Petal.Length = iris.sc$som$prototypes[iris.sc$som$clustering,3]
    iris1$Pt4Petal.Width = iris.sc$som$prototypes[iris.sc$som$clustering,4]
    iris1$X = iris.som$parameters$the.grid$coord[iris.sc$som$clustering,1]
    iris1$Y = iris.som$parameters$the.grid$coord[iris.sc$som$clustering,2]
    
    write.table(iris1, file = "Iris.csv", sep = ",", col.names = NA, quote = FALSE)
    

    【讨论】:

      【解决方案2】:

      我不确定我是否正确,但是:

      1. iris.som$parameters$the.grid 包含簇的坐标(它是一个两列数组,在映射空间中具有 x 和 y 坐标)
      2. 所以我认为你想做的是

        out.grid <- iris.som$parameters$the.grid$coord
        out.grid$sc <- iris.sc$clustering
        

      并导出 out.grid(三列数组)。 iris.sc$som$prototypes 包含集群原型的坐标,但位于原始空间(iris 数据集取其值的四维空间。

      【讨论】:

      • 感谢您的回复。我相信你创建了这个包?感谢您的回复!!!我认为我的回答符合要求。将节点 ID、x + y 坐标、集群和原型添加到原始数据中。你同意吗。顺便说一句,我似乎没有用简单的 iris 数据集实现完美的区分/聚类,这有点令人担忧......
      【解决方案3】:

      我认为我的回答符合要求。添加节点 ID,x + y 坐标、聚类和原型到原始数据。你会 同意。

      是的:)

      【讨论】:

      • 谢谢!很棒的包裹。优于其他。我认为也可以将它用于非数字变量。有一天会试试这个吗?
      猜你喜欢
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 2016-09-04
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多