【问题标题】:Best approach for multiple time series prediction in Tensor Flow JsTensorflow Js 中多时间序列预测的最佳方法
【发布时间】:2018-08-19 20:45:15
【问题描述】:

编辑: 这个答案很有帮助,但是,我真的很想要一些实际的张量流 javascript 代码来展示如何实现它。 How to train a RNN with LSTM cells for time series prediction

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

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

const Data = [
    [0,45,0,0],
    [1,40,0,0],
    [0,10,3,0],
    [0,0,0,0],
    [2,30,0,1], 
    [2,20,3,1]
 ];

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

*注意 X2 需要归一化 --- 如果我们需要将 X2 预测为未来值以便在单个网络中执行所有这些操作时预测 Y,则不确定如何处理此问题

终极目标

使用此数据(包含更多样本)以尽可能最准确的方式预测接下来的 5 个 Y 值,同时权衡之前的模式,就像在时间序列预测中一样,过去的样本可能是之后的 25 个样本。

当前进度

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

当前方法

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

输入:

[
    [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 年后创建了一个帐户,所以失去了这个。

【问题讨论】:

    标签: javascript tensorflow neural-network lstm tensorflow.js


    【解决方案1】:

    这里有很多问题。

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

    您只需要返回 lstm 的序列。如果要预测接下来的 4 个值,那么最后一个 lstm 层的 units 应该是 4,并且 return returnSequences 设置为 true。

    如果您想根据您的系列预测 1 或 0,那么您可以在最后一层使用 binaryCrossEntropy 损失和 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]))
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2021-02-09
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      相关资源
      最近更新 更多