使用Kohonen包som函数遇argument 'X'缺失报错,请求解决
解决Kohonen包SOM报错与六边形网格绘制问题
一、搞定Error in supersom(list(X), ...) : argument "X" is missing, with no default报错
这个报错的核心原因是你调用som()函数时参数传递不符合Kohonen包的规则,具体修正点如下:
参数名用错了:Kohonen包的
som()函数里,输入数据的参数是X,不是data。你代码里写的som(data=data, grid=aGrid, ...)会让函数找不到输入数据,直接触发"X参数缺失"的错误。正确的调用方式应该是:# 方式1:显式指定X参数 som_model <- som(X=preprocessed_data, grid=aGrid, ...) # 方式2:利用位置参数直接传数据(X是第一个参数) som_model <- som(preprocessed_data, grid=aGrid, ...)确认预处理数据有效:还要检查你从
usa.bg.som提取前7列并标准化后的数据是否没问题:- 用
dim(preprocessed_data)查看维度,确保数据不是空的; - 用
any(is.na(preprocessed_data))检查是否有缺失值,标准化过程如果遇到NA会影响后续训练,得先处理掉。
- 用
二、在Kohonen包中绘制六边形网格(替代Matlab SOM工具箱的圆形布局)
Kohonen包原生支持六边形拓扑的SOM,操作非常简单:
创建六边形网格:用
somgrid()函数时,指定topology="hexagonal"(其实这是默认值,显式写出来更清晰):# 生成160×100的六边形网格 aGrid <- somgrid(xdim = 160, ydim = 100, topology = "hexagonal")训练后绘制六边形网格:SOM训练完成后,直接用
plot()函数就能展示六边形布局的神经元。常用的绘图类型有:- 绘制神经元的权重向量:
plot(som_model, type = "codes") - 展示每个神经元分配到的样本数量:
plot(som_model, type = "counts") - 查看样本在网格上的分布:
plot(som_model, type = "mapping")
要是你想单独预览网格结构,直接运行
plot(aGrid)就能看到完整的六边形网格布局,完美替代Matlab里的圆形排列效果。- 绘制神经元的权重向量:
内容的提问来源于stack exchange,提问作者ASKING
相关产品推荐
相关产品推荐

