我正在尝试使用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之后,有没有办法用颜色可视化它,例如热图?
非常感谢你的时间。
干杯
答案 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元组中的三个值。