需要在自组织映射中使用U-Matrix的特定示例

Lon*_*hai 8 machine-learning neural-network

我正在尝试使用SOM开发应用程序来分析数据.但是,在完成培训后,我找不到一种可视化结果的方法.我知道U-Matrix是其中一种方法,但我无法理解它.因此,我要求一个具体而详细的例子来构建U-Matrix.

我还在U矩阵和自组织地图上阅读了答案,但它只涉及1行地图,3x3地图怎么样?我知道3x3地图:

m(1) m(2) m(3)
m(4) m(5) m(6)
m(7) m(8) m(9)
Run Code Online (Sandbox Code Playgroud)

我必须创建一个5x5矩阵:

u(1)   u(1,2)     u(2)   u(2,3)     u(3)
u(1,4) u(1,2,4,5) u(2,5) u(2,3,5,6) u(3,6)
u(4)   u(4,5)     u(5)   u(5,6)     u(6)
u(4,7) u(4,5,7,8) u(5,8) u(5,6,8,9) u(6,9)
u(7)   u(7,8)     u(8)   u(8,9)     u(9)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何计算u-weight u(1,2,4,5),u(2,3,5,6),u(4,5,7,8)和u(5,6) ,8,9).

最后,在构建U-Matrix之后,有没有办法用颜色可视化它,例如热图?

非常感谢您的宝贵时间.

干杯

Lud*_*can 5

我不知道你是否仍然对此感兴趣,但我找到了这个链接 http://www.uni-marburg.de/fb12/datenbionik/pdf/pubs/1990/UltschSiemon90 ,它非常具体地解释了如何计算 U-矩阵。希望能帮助到你。

顺便说一句,我发现该网站的链接有几个参考 SOM 的资源,我把它留在这里以防万一有人感兴趣:http : //www.ifs.tuwien.ac.at/dm/somtoolbox/visualisations.html


dou*_*oug 1

Kohonen 地图的基本思想是将数据点映射到晶格 该晶格通常是二维矩形网格。

在最简单的实现中,通过创建具有以下维度的 3D 数组来初始化晶格:

width * height * number_features
Run Code Online (Sandbox Code Playgroud)

这就是 U 矩阵

宽度和高度由用户选择;number_features 只是数据中特征(列或字段)的数量。

直观上,这只是创建一个维度为 w * h 的 2D 网格(例如,如果 w = 10 且 h = 10,则您的晶格有 100 个单元),然后在每个单元中放置一个随机的 1D 数组(有时称为“参考元组”)其大小和值受您的数据限制。

参考元组也称为权重

U矩阵是如何渲染的?

在下面的示例中,数据由 rgb 元组组成,因此参考元组的长度为 3,并且这三个值中的每一个都必须位于 0 到 255 之间。

正是通过这个 3D 数组(“晶格”),您开始了主迭代循环。该算法迭代地定位每个数据点,以便它最接近其他类似的数据点。

如果将其随时间(迭代次数)绘制,则可以可视化簇的形成。

我为此使用的绘图工具是出色的 Python 库Matplotlib,它可以直接绘制晶格,只需将其传递给imshow函数即可。

下面是 SOM 算法进度的八个快照,从初始化到 700 次迭代。新初始化的(iteration_count = 0)晶格渲染在左上方面板中;最终迭代的结果位于右下面板中。

或者,您可以使用较低级别的成像库(Python 中的,例如 PIL)并将参考元组一次一个地传输到 2D 网格上:

for y in range(h):
    for x in range(w):
        img.putpixel( (x, y), (
            SOM.Umatrix[y, x, 0], 
            SOM.Umatrix[y, x, 1], 
            SOM.Umatrix[y, x, 2]) 
        )
Run Code Online (Sandbox Code Playgroud)

这里的img是PIL的Image类的一个实例。这里的图像是通过一次一个像素迭代网格来创建的;对于每个像素,对img调用putpixel三次,这三次调用当然对应于 RGB 元组中的三个值。

图片1 图片2