【发布时间】:2021-04-22 02:46:24
【问题描述】:
我正在尝试学习 R 中的“kohonen”包。特别是,有一个名为“supersom()”的函数(https://www.rdocumentation.org/packages/kohonen/versions/3.0.10/topics/supersom,对应于无监督机器学习中使用的 SOM(自组织映射)算法) ) 我正在尝试应用于某些数据。
下面,(来自上一个问题:R error: "Error in check.data : Argument Should be Numeric")我学习了如何将“supersom()”函数应用于一些带有“因子”和“数值”变量的人工创建数据。
#the following code works
#load libraries
library(kohonen)
library(dplyr)
#create and format data
a =rnorm(1000,10,10)
b = rnorm(1000,10,5)
c = rnorm(1000,5,5)
d = rnorm(1000,5,10)
e <- sample( LETTERS[1:4], 100 , replace=TRUE, prob=c(0.25, 0.25, 0.25, 0.25) )
f <- sample( LETTERS[1:5], 100 , replace=TRUE, prob=c(0.2, 0.2, 0.2, 0.2, 0.2) )
g <- sample( LETTERS[1:2], 100 , replace=TRUE, prob=c(0.5, 0.5) )
data = data.frame(a,b,c,d,e,f,g)
data$e = as.factor(data$e)
data$f = as.factor(data$f)
data$g = as.factor(data$g)
cols <- 1:4
data[cols] <- scale(data[cols])
#som model
som <- supersom(data= as.list(data), grid = somgrid(10,10, "hexagonal"),
dist.fct = "euclidean", keep.data = TRUE)
一切正常 - 问题是,当我尝试对“更真实和更大的数据”应用“supersom()”函数时,出现以下错误:
"Error: Non-informative layers present : mean distances between objects zero"
当我查看此函数 (https://rdrr.io/cran/kohonen/src/R/supersom.R) 的源代码时,我注意到相同错误的引用:
if (any(sapply(meanDistances, mean) < .Machine$double.eps))
stop("Non-informative layers present: mean distance between objects zero")
谁能告诉我如何解决这个错误,即让“supersom()”函数处理因子和数值数据?
我认为删除重复行和 NA 可能会解决此问题:
data <- na.omit(data)
data <- unique(data)
但是同样的错误(“存在非信息层:物体之间的平均距离为零”)仍然存在。
有人可以帮我找出可能导致此错误的原因吗?注意:当我删除“因子”变量时,一切正常。
来源:
https://cran.r-project.org/web/packages/kohonen/kohonen.pdf
https://www.rdocumentation.org/packages/kohonen/versions/2.0.5/topics/supersom
【问题讨论】:
标签: r machine-learning type-conversion distance