我正在阅读关于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