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

时间:2011-06-26 17:57:40

标签: machine-learning neural-network

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

我也在U-matrix and self organizing maps读了一个答案,但它只涉及1行地图,3x3地图怎么样?我知道3x3地图:

m(1) m(2) m(3)
m(4) m(5) m(6)
m(7) m(8) m(9)

我必须创建一个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)

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

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

非常感谢你的时间。

干杯

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

Kohonen地图的基本思想是将数据点映射到a lattice ,通常是2D矩形网格。

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

width * height * number_features

这是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]) 
        )

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

Image1 Image2