Добавить кластеры и узлы из пакета SOMbrero к данным обучения

Я немного играю с пакетом SOMbrero. Я хотел бы прикрепить номера кластеров, созданные так (взято отсюда):

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

и координаты X и Y узлов SOM к набору данных обучения.

В некотором коде, где я использую пакет 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:

Пример кода с использованием набора данных iris можно найти здесь.

PPS:

Я немного поиграл с кодом iris, приведенным выше, и думаю, что мне удалось извлечь кластеры, идентификаторы узлов и прототипы (см. Код ниже). Чего не хватает, так это координат 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)

3 ответа

Решение

Я думаю, что я понял это на примере радужной оболочки (пожалуйста, исправьте / улучшите код! - Я не бегло говорю на 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)

Я думаю, что мой ответ отражает требования. Добавление идентификаторов узлов, координат x + y, кластера и прототипов к исходным данным. Вы бы согласились?

да:)

Я не уверен, что я правильно понял, но:

  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 набор данных принимает свои значения.

Другие вопросы по тегам