分类点基于其位置

时间:2015-10-11 00:28:42

标签: python algorithm machine-learning classification pybrain

我想用点位置训练,询问和检查我的神经网络。

我有一个带有INI文件结构的文件,其中包含按类排序的点列表。 例如:

[points]
c_0 = (0, 0)#(1, 1)#(0,1)
c_1 = (5, 5)#(6, 6)#(10, 10)

我解析了文件,然后我尝试学习来自PyBrain库的神经网络。所以我做了这样的代码

net = buildNetwork(2, 3, 1, bias=True)
new_params = np.array([1.0]*13)
net._setParameters(new_params)
ds = SupervisedDataSet(2, 1)

for (class) ... # loop for every class
    for (point) ... # loop for every point in class
        ds.addSample(point, class)

trainer = BackpropTrainer(net, ds)
print(trainer.train())

所以它是一个线性函数,我可以识别将分配哪个类以后的点。

但是当我使用文件中的偶数点0,1或2时,我仍然得到相同的结果。

例如:

>>> net.activate([0, 0])
4.
>>> net.activate([4, 4])
4.

我认为我做错了。也许有更好的图书馆?我不需要比我写的更多的东西。

1 个答案:

答案 0 :(得分:0)

问题在于:

  

<强> trainer.train()

     

此调用训练网络一个完整的纪元,并返回与错误成比例的双倍。如果我们想要训练网络直到收敛,还有另一种方法:

     

<强> trainer.trainUntilConvergence()

import numpy as np
from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets.supervised import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer


c_0 = [(0, 0), (1, 1), (0,1)]
c_1 = [(5, 5), (6, 6), (10, 10)]
c_2 = [(20, 20), (23, 23), (25, 25)]

net = buildNetwork(2, 3, 1, bias=True)
new_params = np.array([1.0]*13)
net._setParameters(new_params)
ds = SupervisedDataSet(2, 1)


for point in c_0:
    ds.addSample(point, 0)
for point in c_1:
    ds.addSample(point, 1)
for point in c_2:
    ds.addSample(point, 2)

trainer = BackpropTrainer(net, ds)
trainer.trainUntilConvergence()


print(net.activate([-1, -1]))  # [-0.09622381] ~0 - classify for cluster 0
print(net.activate([7, 7]))    # [ 0.95804033] ~1 - classify for cluster 1
print(net.activate([26, 26]))  # [ 2.04101203] ~2 - classify for cluster 2