我正在使用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中显示?