在过去的几个月里,我一直在研究自组织地图(SOM)。但我在理解降维部分时仍然有些困惑。你能建议任何简单的方法来理解 SOM 在任何现实世界数据集上的实际工作吗(就像来自 UCI 存储库的数据集)。
1 回答
好的,首先参考一些之前的相关问题,这将使您更好地理解 SOM 的降维和可视化属性。 绘制 Kohonen 地图 - 理解可视化, 解释自组织地图。
第二个测试 SOM 属性的简单案例:
- 创建一个具有 3 个特征的简单数据集,其中您有 3 个不同的集群;
- 对此数据集执行 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(净,x)
输出:
所以在第一个图中,您已经可以看到将 3000x3 数据集压缩为 20x20x3 地图(减少了近 10 倍)。您还可以看到,您的组件可以更轻松地压缩为 3 个单个类。
当您查看邻居距离并点击地图时,这一点更加明显(分别为图 2 和图 3):
在图 2 中,节点与其邻居的差异越大(通过节点权重及其邻居权重之间的欧几里德距离计算),这两个节点之间的颜色越深。因此,我们可以看到高度相关节点的 3 个区域。我们可以使用该图像并对其进行阈值处理,例如获得 3 个不同的区域(3 个集群),然后获得平均权重。
在图 3 中,显示了数据集中有多少样本在每个节点中有标签。可以看出,前面的 3 个区域呈现出某种均匀分布的样本(考虑到 3 个集群具有相同数量的样本,这是有道理的),并且接口节点(划分 3 个区域的节点)没有映射任何样品。同样,我们可以使用该图像并对其进行阈值处理,例如获得 3 个不同的区域(3 个集群),然后获得平均权重。
因此,总而言之,使用此数据集和一些简单的后处理,您可以将数据集从 3000X3 减少到 3x3 矩阵