我已经为我的课程编写了 SOM 网络,但它不起作用,我不知道为什么。我有一个 Node 类,它是单个神经元并包含权重向量。然后,我编写了包含 Node 数组的 SOM 类。
我的任务是实现 SOM,从这些数据中:http: //archive.ics.uci.edu/ml/datasets/SPECT+Heart 告诉我哪个输入向量(它是一个二进制向量)适合哪个类别(0 或 1 )。
代码: http: //pastebin.com/GerkTf3C
训练过程:
- 我从一组训练数据和它适合的类别中随机获得一个输入向量。
- 我激活网络并获得一系列距离,它告诉我特定神经元与输入向量有何不同。
- 我得到了获胜者节点的索引,它与输入向量的距离最小。
- 我计算当前迭代的学习率和邻域半径。
- 对于每个节点,我计算它到获胜节点的欧几里得距离。
- 如果节点在获胜者的附近,我计算它必须如何更改和更新他的权重向量,并将它适合的类别添加到它的集群向量中。
- 当学习率大于某个限制时,我重复步骤 1 到 6
- 最终,我为每个节点设置了它适合的类别。
不幸的是,我获得了大约 40% 到 80% 的有效性(它非常不稳定,我不知道如何消除这种随机性)在训练集上测试它(我假设我应该在训练集上具有 100% 的有效性)
PS对不起我的英语和代码质量,但我刚刚开始学习Python。