encog - 使用多种输入类型进行预测

时间:2016-10-28 14:10:14

标签: java prediction encog

我正在使用encog来预测时间序列数据,就像太阳黑子示例一样。我的数据集有3列x,y,z,我想预测x,y,z的下一个值,输入窗口大小为3.也就是说,我想使用3组x,y,z值。例如,x(t-3),y(t-3),z(t-3),x(t-2),y(t-2),z(t-2),x(t-1) ),y(t-1),z(t-1)预测x(t),y(t),z(t)。设置培训数据没有问题。以下是我的培训代码:

TemporalMLDataSet result = new TemporalMLDataSet(3, 1);

    TemporalDataDescription desc1 = new TemporalDataDescription(new ActivationSIN(),TemporalDataDescription.Type.RAW, true, true);
    TemporalDataDescription desc2 = new TemporalDataDescription(new ActivationSIN(),TemporalDataDescription.Type.RAW, true, true);
    TemporalDataDescription desc3 = new TemporalDataDescription(new ActivationSIN(),TemporalDataDescription.Type.RAW, true, true);

    result.addDescription(desc1);
    result.addDescription(desc2);
    result.addDescription(desc3);

    for (int year = 3; year < train_end; year++)
    {
        TemporalPoint point = new TemporalPoint(3);
        point.setSequence(year);
        point.setData(0, x[year]);
        point.setData(1, y[year]);
        point.setData(2, z[year]);


        result.getPoints().add(point);
    }
    result.generate();
    return result;

但我无法理解如何使用MLdata输入/输出进行预测。在太阳黑子示例中,每个数据点只有一个值(1列)。但就我而言,每个数据点有3个值(x,y,z)。以下是用于预测的太阳黑子示例中提供的代码:

for (int year = evaluate_start,l=0; year < EVALUATE_END; year++,l++)
    {
        MLData input = new BasicMLData(3);

        for (int i=0;i<input.size();i++){
        input.setData(i, x[(year - 3+ i)]); // how to set values for y and z??
    }

        MLData output = network.compute(input);

        double prediction = output.getData(0);

从上面的代码中,变量输入将包含3个x值。但是我想要一个值x,一个y值和一个z值,而不是只有x的3个值。问题1:我怎样才能实现这个目标?

现在这3个值对应于3的窗口大小。但我想使用3组x,y,z值。例如,x(t-3),y(t-3),z(t-3),x(t-2),y(t-2),z(t-2),x(t-1) ),y(t-1),z(t-1)预测x(t),y(t),z(t)。因此窗口大小为3时有9个值。在太阳黑子示例中,3个输入神经元对应于窗口大小3.问题2:我的输入层应如何在encog中显示?

0 个答案:

没有答案