Javascript 张量流中多时间序列预测的最佳方法

Javascript 张量流中多时间序列预测的最佳方法,javascript,tensorflow,neural-network,lstm,tensorflow.js,Javascript,Tensorflow,Neural Network,Lstm,Tensorflow.js,编辑: 这个答案非常有帮助,但是,我真的希望一些实际的tensor flow javascript代码来展示如何实现这一点 我发现的其他问题不包括标准化或我预测未来超过1点的具体目标,其中记住了局部性,即如果在T+1预测1,那么T+2更有可能为0 总数据样本(实际有132个样本) 数组表示[X1,X2,X3,Y] *注X2需要标准化——如果我们需要将X2预测为未来值,以便在单个网络中进行所有这些操作时预测Y,则不确定如何处理 最终目标 使用该数据(有更多样本)以最准确的方式预测下一个5Y值,同时

编辑: 这个答案非常有帮助,但是,我真的希望一些实际的tensor flow javascript代码来展示如何实现这一点

我发现的其他问题不包括标准化或我预测未来超过1点的具体目标,其中记住了局部性,即如果在T+1预测1,那么T+2更有可能为0

总数据样本(实际有132个样本)

数组表示[X1,X2,X3,Y]

*注X2需要标准化——如果我们需要将X2预测为未来值,以便在单个网络中进行所有这些操作时预测Y,则不确定如何处理

最终目标

使用该数据(有更多样本)以最准确的方式预测下一个5Y值,同时对之前的模式进行加权,如在时间序列预测中,过去的样本可能是重要的25个样本

当前进度

通过在25个[X1,X2,X3]数组上进行训练,预测了25个值,结果发现输入位置1([X1,X2,X3]数组1)可能会影响除位置2([X1,X2,X3]数组2)之外的所有下一个25 Y值只能影响集合的2-25,依此类推——位置25只能影响25个预测值中的最后一个值——因此,就网络而言,我甚至可能没有真正预测下一个25

当前方法

期望的预测将是上一次训练后的下一个3y值(例如)

输入:

[
    [0,45,0],
    [1,40,0],
    [0,10,3]
]
输出

[
    [0],
    [1],
    [1]
]
迄今为止尝试的模型

var model = tf.sequential();

model.add(tf.layers.batchNormalization({
    inputShape:[null,6],
    axis: 2,
    units:10,
    //returnSequences: true,
    //kernelInitializer: 'VarianceScaling'
}));

model.add(tf.layers.lstm({
    //inputShape:[null,7],
    units: 10,
    activation: 'relu',
    returnSequences: true,
    //kernelInitializer: 'VarianceScaling'
}));

model.add(tf.layers.lstm({
    //inputShape:[null,7],
    units: 6, 
    activation: 'relu',
    returnSequences: true,
    //kernelInitializer: 'VarianceScaling'
}));

//modelHelper(model);
const optimizer = tf.train.adam (.05);
//optimizer: 'sgd', loss: 'binaryCrossentropy', lr: 0.1
model.compile({
    loss:tf.losses.meanSquaredError,
    optimizer:optimizer
});
当在每个时间位置(X1、X2、X3)使用多个值时,预测时间序列的下一个4、5或25个单一(Y)值而不仅仅是下一个值的最佳方法是什么?


*浏览了5年后创建了一个帐户,所以在这个帐户上丢失了。

这里有很多问题

预测时间序列的下一个4、5或25个单一(Y)值而不仅仅是下一个值的最佳方法是什么

您只需要返回lstm的序列。如果要预测接下来的4个值,则最后一个lstm层的
单位应为4,返回
returnSequences
设置为true

如果您想根据您的系列预测1或0,那么您可以使用
binaryCrossEntropy
loss和
softmax
激活来计算最后一层的概率。至于什么是最有可能的,网络将找出数据是否与你的观察结果非常一致,即如果在T中预测1,那么在T+i下一步可能预测0

X2需要标准化——如果我们需要将X2预测为未来值,以便在单个网络中进行所有这些操作时预测Y,则不确定如何处理

这并不特定于您的用例,将所有数据保持在同一范围内是最佳实践。对于方差较大的数据,模型对收敛性的影响较大。可以在馈送模型之前规范化x2特征。这是一个函数,它将跨所有功能规范化数据

// standardize a tensor data by computing (data - mean(data) ) / std(data)

function standardize(data) {
  let means = []
  let variances = []
  for ( let axe = 0 ; axe < axes; axe++) {
    const {mean, variance} = tf.moments(data.gather([axe], 1), undefined, true )
    means.push(mean)
    variances.push(variances)
  }

  return data.sub(tf.concat(means).reshape([axes])).div(tf.concat(variances).reshape([axes]))
}
//通过计算标准化张量数据(数据-平均值(数据))/std(数据)
功能标准化(数据){
let means=[]
设方差=[]
对于(让axe=0;axe
// standardize a tensor data by computing (data - mean(data) ) / std(data)

function standardize(data) {
  let means = []
  let variances = []
  for ( let axe = 0 ; axe < axes; axe++) {
    const {mean, variance} = tf.moments(data.gather([axe], 1), undefined, true )
    means.push(mean)
    variances.push(variances)
  }

  return data.sub(tf.concat(means).reshape([axes])).div(tf.concat(variances).reshape([axes]))
}