我尝试更准确地遵循此tutorial代码:
groups = 3
iris.hc = cutree(hclust(dist(iris.som$codes)), groups)
# plot
plot(iris.som, type="codes", bgcol=rainbow(groups)[iris.hc])
#cluster boundaries
add.cluster.boundaries(iris.som, iris.hc)
然而,位:
dist(iris.som$codes)
给了我:
(list) object cannot be coerced to type 'double'
有什么想法吗?
答案 0 :(得分:1)
命令dist
需要一个数字矩阵作为输入,但对象iris.som$codes
是一个列表而不是一个矩阵:
str(iris.som$codes)
List of 1
$ : num [1:25, 1:4] -1.353 -0.933 -0.523 0.321 0.569 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:25] "V1" "V2" "V3" "V4" ...
.. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
因此,您必须在代码中使用dist(iris.som$codes[[1]])
:
library("kohonen")
iris.sc = scale(iris[, 1:4])
iris.grid = somgrid(xdim = 5, ydim=5, topo="hexagonal")
iris.som = som(iris.sc, grid=iris.grid, rlen=100, alpha=c(0.05,0.01))
iris.hc = cutree(hclust(dist(iris.som$codes[[1]])), groups)
plot(iris.som, type="codes", bgcol=rainbow(groups)[iris.hc])
add.cluster.boundaries(iris.som, iris.hc)