将SOMbrero软件包中的群集和节点添加到培训数据中

将SOMbrero软件包中的群集和节点添加到培训数据中,r,self-organizing-maps,R,Self Organizing Maps,我在玩弄这个包裹。我想附上这样创建的群集编号(取自): 代码: library(SOMbrero) 种子集(100) setwd(“D:\\r项目\群集”) #iris.som我不确定是否正确,但是: iris.som$parameters$.grid包含簇的坐标(它是一个两列数组,在映射空间中具有x和y坐标) 所以我认为你想做的是 out.grid <- iris.som$parameters$the.grid$coord out.grid$sc <- iris.sc$cluste

我在玩弄这个包裹。我想附上这样创建的群集编号(取自):

代码:

library(SOMbrero)
种子集(100)
setwd(“D:\\r项目\群集”)

#iris.som我不确定是否正确,但是:

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

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

    out.grid我想我已经使用iris示例解决了这个问题(请更正/改进代码!-我对R不流利):

    library(SOMbrero)
    种子集(100)
    setwd(“D:\\r项目\\somberoclustering”)
    虹膜
    我认为我的回答符合要求。添加节点ID,x+
    原始数据的y坐标、簇和原型。你愿意吗
    同意


    是:)

    谢谢您的回复。我相信是你创造了这个软件包?感谢您的回复!!!我认为我的回答符合要求。将节点ID、x+y坐标、集群和原型添加到原始数据中。你同意吗。顺便说一句,使用简单的虹膜数据集,我似乎无法实现完美的区分/聚类,这有点令人担忧……谢谢!很棒的包裹。比别人优越。我认为也可以将其用于非数值变量。有一天你会试试这个吗?
    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)
    
    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)
    
    out.grid <- iris.som$parameters$the.grid$coord
    out.grid$sc <- iris.sc$clustering
    
    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)