用神经网络填充缺失的序列值

时间:2013-05-20 19:41:25

标签: python artificial-intelligence neural-network time-series forecasting

我想做一个小项目,我想用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()
你怎么看?你相信这样的东西会起作用吗?

3 个答案:

答案 0 :(得分:2)

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

然后,您可以致电x = net.activate([seq]),其中seq是与未知值x相关联的输入序列。

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

要考虑的主要因素是工具的适当性以及您要尝试的培训数据。如果您只想将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])

答案 1 :(得分:1)

我可以不给你那个python库的具体答案,但正如我所看到的,你有一个神经网络,你给它的形式样本

    [ i0 i1 ... i n ] --> [ o0 o1 ... on ]
    (input vector)        (output vector)

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

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

    Sequence: 1 2 3 4 X 2 3 4 5 6 7 8
    Training with input length 3, output length 1:
    [1 2 3] -> 4
    [2 3 4] -> 5 (the second one, as the first one is not available)
    [3 4 5] -> 6
    [4 5 6] -> 7
    [5 6 7] -> 8

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

答案 2 :(得分:1)

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