我认为this data set是制作SOM的好候选人。 所以,我把它转换成了文字:
10
12 1 0 0
13 3 0 0
14 21 0 0
19 1983 15 0
24 5329 48 0
29 4543 50 0
34 3164 32 0
39 1668 22 1
44 459 4 0
49 17 0 0
我正在使用Octave,所以我用这些命令转换了数据:
dataIn = fopen('data.txt','r');
n = fscanf(dataIn,'%d',1);
D = fscanf(dataIn,'%f'); %D is a 1 x n column matrix
D = D'; %Transpose the data D is now an n x 1 matrix
D = reshape(D, 4, []); % give D the shape of a 4 x n/4 matrix
D = D(2:4, :); % the dimensions to be used for the SOM will come from the bottom three rows
现在,我正在应用SOM脚本使用D生成地图。 该脚本为here 它使用findBMU定义为:
%finds best matching unit in SOM O
function [r c ] = findBMU( iv,O )
dist = zeros(size(O)); for i=1:3
dist(:,:,i) = O(:,:,i)-iv(i);
iv(i);
end
dist = sum(dist.^2,3);
[v r] = min(min(dist,[],2));
[v c] = min(min(dist,[],1));
最后,它以随机地图开头,如下所示:
它变成了:
问题是,我不知道我的SOM在说什么。我该如何阅读?
答案 0 :(得分:0)
首先,您应该知道Octave充其量只能提供SOM方法的近似值。 SOM的主要方法优势是(所有)隐含参数的潜在透明访问,并且不再能够在Octave中访问这些参数。
其次,考虑到你的数据,首先通过对信息进行总结然后用它来提供信息来严重破坏信息是没有多大意义的。基本上你在上面的表格中有四个变量:年龄,总N,单N,双N.你销毁的是有关该地区的信息。
这样你就把三个发行版放到了SOM中。你唯一能想到的就是集群。然而,SOM不是为构建集群而构建的。相反,SOM用于诊断和预测建模,以便找到最准确的模型和最相关的变量。请注意术语“最佳匹配单位”!
在您的示例中,您只能在SOM中找到分布。基本上,没有解释,因为既没有变量也没有预测/诊断目的。
您可以构建模型,例如,确定分布的相似性。然而,为此你应该使用拟合优度检验(非参数,Kolmogorof-Smirnov),而不是SOM。