我是SOM的新手,并且正在使用Matlab SOM软件包检查一段时间内的海平面压力。我的2D输入数组是(行x列):压力(纬度和经度的函数)x时间。训练完成后,当我绘制SOM重量位置时,将得到以下信息:
这是正确的吗?我看到的所有重量位置图都不是1:1,所以我的图看起来很奇怪。
这是我的代码(注意:仅出于概念目的,代码不会执行)
slp = somedata; % dim: 30200 x 1550 [pressure x time]
% Calculate mean for each location over time
mean_slp = nanmean(slp,2);
% Calculate anomalies for each location over time
slp_anom = nan((i2-i1+1)*(j2-j1+1),nfiles);
for i = 1:time
slp_anom(:,i) = slp3(:,i) - mean_slp(i,1);
end
% Normalize data
[slp_anom2,PS] = mapminmax(slp_anom);
net = selforgmap([4 4]);
net.trainParam.epochs = 1000;
net = train(net,slp_anom2);
我感谢您提供的所有反馈。谢谢!
答案 0 :(得分:0)
SOM算法实质上是计算一组与输入数据尺寸相同的原型/密码本向量。它通过在输入空间内根据某些规则(随机,PCA等)初始化#个神经元,然后在输入空间内移动它们的位置,从而在确定影响的邻域函数的约束下最小化距离度量,从而实现此目的每次迭代中神经元感受野中数据点的数量。
体重位置图是一个 3D图(!),因此您需要使用旋转3D工具才能理解地图。
然后,根据尺寸,您看到的是淡蓝色点和红线的集合。淡蓝色的点是神经元位置的投影,根据为图选择的两个维度,它们已在输入空间周围移动。
因此,根据您选择用于计算曲线图的重量尺寸(又称输入列),曲线图看起来会有所不同。 Matlab通常选择前两个输入列。
在这里我无能为力,因为对于简单的压力/时间向量,您的数据集显得非常宽。这些列代表地球上的不同测量点吗?如果是这样,您应该问自己:拥有SOM模型会带来什么好处。从新的时间戳记中获得新的向量时,您将怎么办?您想如何处理?您将获得什么附加信息?