错误在R中绘制Kohonen地图?

Jam*_*cox 6 plot r som

我正在阅读关于R-bloggers的博客文章,我对代码的最后一部分感到困惑,无法弄明白.

http://www.r-bloggers.com/self-organising-maps-for-customer-segmentation-using-r/

我试图用我自己的数据重新创建它.我有5个变量遵循2755点的指数分布.

我很好,可以绘制它生成的地图:

plot(som_model, type="codes")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我不理解的代码部分是:

var <- 1
var_unscaled <- aggregate(as.numeric(training[,var]),by=list(som_model$unit.classif),FUN = mean, simplify=TRUE)[,2]
plot(som_model, type = "property", property=var_unscaled, main = names(training)[var], palette.name=coolBlueHotRed)
Run Code Online (Sandbox Code Playgroud)

据我所知,代码的这一部分假设是在地图上绘制其中一个变量以查看它的外观,但这是我遇到问题的地方.当我运行代码的这一部分时,我收到警告:

Warning message:
In bgcolors[!is.na(showcolors)] <- bgcol[showcolors[!is.na(showcolors)]] :
number of items to replace is not a multiple of replacement length
Run Code Online (Sandbox Code Playgroud)

它产生了情节:

在此输入图像描述

哪个只是一些看起来不正确...

现在我认为它归结为聚合函数重新排序数据的方式.var_unscaled的长度是789,som_model $ data,training [,var]和unit.classif的长度都是2755的长度.我尝试绘制聚合数据,结果没有警告,但是一个难以理解的图形(如预期的那样).

现在我认为它已经这样做了,因为unit.classif里面有很多重复的数字,这就是为什么它的大小减小了.

问题是,我是否担心警告?它是否产生了准确的图表?在"情节"命令中寻找的"财产"部分究竟是什么?有没有不同的方法可以"聚合"数据?

小智 11

我认为你必须创建调色板颜色.如果你把论点

coolBlueHotRed <- function(n, alpha = 1) {rainbow(n, end=4/6, alpha=alpha)[n:1]}
Run Code Online (Sandbox Code Playgroud)

然后尝试获得一个情节,例如

plot(som_model, type = "count", palette.name = coolBlueHotRed)
Run Code Online (Sandbox Code Playgroud)

结局是成功的.

此链接可以帮助您:http://rgm3.lab.nig.ac.jp/RGM/R_rdfile?f = khonen/man/plot.kohonen.Rd&d = R_CC