过去几个月我一直在研究自组织映射(SOM)。但是我在理解降维部分仍然有些困惑。你能提出任何简单的方法来理解 SOM 在任何现实世界数据集上的实际工作吗(就像来自 UCI 存储库的数据集一样)。
最佳答案
好的,首先请引用之前的一些相关问题,这将使您更好地了解 SOM 的降维和可视化属性。
Plotting the Kohonen map - Understanding the visualization ,
Interpreting a Self Organizing Map .
第二个简单的案例来测试 SOM 的属性:
集群;
我将使用 MATLAB 编程语言来举例说明如何做到这一点以及您可以从学习过程中获得什么。
代码:
% create a dataset with 3 clusters and 3 features
x=[ones(1000,1)*0.5,zeros(1000,1),zeros(1000,1)];
x=[x;[zeros(1000,1),ones(1000,1)*0.5,zeros(1000,1)]];
x=[x;[zeros(1000,1),zeros(1000,1),ones(1000,1)*0.5]];
x=x+rand(3000,3)*0.2;
x=x';
%define a 20x20 SOM through MATLAB "selforgmap" function, and train using the "train"
net = selforgmap([20 20]);
[net,tr] = train(net,x);
%display the number of hits, neighbour distance, and plane maps figure,plotsomplanes(net)
figure,plotsomnd(net)
数字,plotsomhits(net,x)
输出:
因此,在第一个图中,您已经可以看到将 3000x3 数据集压缩为 20x20x3 map (缩小了近 10 倍)。您还可以看到,您的组件可以更轻松地压缩为 3 个单独的类。
当您查看邻居距离和命中 map 时,这一点更加明显(分别为图 2 和图 3):
在图 2 中,节点与其邻居(通过节点权重与其邻居权重之间的欧几里德距离计算)的差异越大,这两个节点之间的颜色就越深。因此,我们可以看到 3 个高度相关的节点区域。我们可以使用这个图像并对其进行阈值处理,例如获得 3 个不同的区域(3 个集群),然后获得平均权重。
在图 3 中,显示了每个节点内标签的数据集中有多少个样本。可以看出,前 3 个区域的样本分布有些均匀(考虑到 3 个集群具有相同数量的样本,这是有道理的),并且界面节点(划分 3 个区域的节点)没有映射任何 sample 。同样,我们可以使用此图像并对其进行阈值处理,例如获得 3 个不同的区域(3 个集群),然后获得平均权重。
所以总而言之,使用这个数据集和一些简单的后处理,你可以将你的数据集从 3000X3 减少到 3x3 矩阵
关于som - 使用自组织映射的降维,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27086222/