4

我想做一个小项目,我想在 python 中使用神经网络。我发现 pybrain 是最好的解决方案。但是直到现在,我发现的所有示例和问题都无济于事。

我有一个数字序列。数百行。缺少一些值,而不是数字,有一个“x”。

例如

1425234838636**x**40543485435097**x**43953458345345430843967067045764607457607645067045**x**04376037654067458674506704567408576405

等等。这只是一个例子。不是我的顺序。

我想一一读取这些值并训练我的神经网络,当我找到一个“x”时,我会预测这个数字,然后我会继续用以下数字训练它。

到目前为止,我发现的是这样的训练

trainSet.addSample([0,0,0,0],[1])

有一些输入和一些输出。

有什么建议我该如何继续?

编辑:我想出了一些东西,我想收到反馈,因为我不知道它是否正确。

我仍然有上面的字符串。我将它拆分为列表,因此我有一个列表,其中每个实体都是一个数字。

for ind in range(len(myList)):
   if not myList[ind] == "x" and not myList[ind+1]=="x":
       ds.addSample(myList[ind],myList[ind+1])
   else:
       break

net = FeedForwardNetwork() 
inp = LinearLayer(1) 
h1 = SigmoidLayer(1) 
outp = LinearLayer(1)

net.addOutputModule(outp) 
net.addInputModule(inp) 
net.addModule(h1)

net.addConnection(FullConnection(inp, h1))  
net.addConnection(FullConnection(h1, outp))

net.sortModules()

trainer = BackpropTrainer(net, ds)
trainer.trainOnDataset(ds,1000)
trainer.testOnData(verbose=True)

lis[ind+1] = net.activate((ind,))

GO to the beggining and continue from the last "x" which replaced from the net.activate()

你怎么看?你相信这样的事情会奏效吗?

4

3 回答 3

2

您所描述的是一个名为Imputation的统计应用程序:替换数据中的缺失值。传统的方法不涉及神经网络,但在这个方向上肯定有一些研究。这不是我的领域,但我建议您查看文献。

于 2013-06-01T15:38:18.207 回答
2

一般来说,如果你使用反向传播训练你的 ANN,你基本上是在训练一个输入-输出图。这意味着您的训练集必须包含已知的输入-输出关系(训练集中不包含任何未知值)。然后,ANN 成为您输入和输出之间实际关系的近似值。

然后,您可以调用x = net.activate([seq])whereseq是与未知值关联的输入序列x

如果x是已知结果的未知输入序列,则必须调用 ANN 的逆。我不认为有一种简单的方法可以在 pybrain 中反转 ANN,但是您可以使用原始训练数据的倒数来训练 ANN。换句话说,使用您的已知结果作为训练输入,并将它们的关联序列作为训练结果。

要考虑的主要事情是工具的适当性以及您正在尝试做的事情的训练数据。如果您只想x根据前一个数字进行预测,那么我认为您的训练是正确的。我猜x这将是先前n数字的函数,在这种情况下,您希望将数据集更新为:

n = 10
for ind in range(len(myList)):
    # Don't overrun our bounds
    if ind == len(myList)-1:
        break

    # Check that our sequence is valid
    for i in range(ind-n, ind+1):
        if i >= 0 and myList[i] == "x":
            # we have an invalid sequence
            ind += i   # start next seq after invalid entry
            break

    # Add valid training sequence to data set
    ds.addSample(myList[ind-n:ind],myList[ind+1])
于 2013-06-07T20:03:30.143 回答
1

对于那个 python 库,我不能给你一个具体的答案,但正如我所见,你有一个神经网络,你给它形式的样本

    [ i0 i1 ... in ] --> [ o0 o1 ... on ]
    (输入向量) (输出向量)

现在你用长度为 1 的样本向量训练网络。你的网络不知道呈现给它的数字的序列,该序列只对训练网络的结果感兴趣。

要获得一个网络,它知道您可以将连续数字的向量作为输入和您想要的单个数字作为输出的序列。您留下包含 X 示例的序列:

    顺序:1 2 3 4 X 2 3 4 5 6 7 8
    输入长度为 3,输出长度为 1 的训练:
    [1 2 3] -> 4
    [2 3 4] -> 5(第二个,因为第一个不可用)
    [3 4 5] -> 6
    [4 5 6] -> 7
    [5 6 7] -> 8

我认为使用它,您的网络可以稍微适应输入序列。“如何”提取正确的训练序列作为输入,我必须留给领域专家(你)。

于 2013-06-01T13:40:29.210 回答