2017-08-31 1 views
1

機械学習を使用する(ライブラリとして私はTensorflowとTflearnを試しました(これはTensorflowのラップです))私は次の週(あなたがそれ以上の裏話をしたいなら私の以前の質問を見てください)。私の訓練セットは、400Kのタグ付けされたエントリで構成されています(日付は毎分の輻輳値です)。現実と予測の間の遅延ギャップ

私の問題は、今や予測と現実の時間差があることです。

現実と予測でチャートを描く必要があった場合、私の予測は現実と同じ形をしていますが、前もって予測していることがわかります。彼女は現実の前に増減する。私の訓練に問題があったと思うようになった。私のトレーニングが終わったときに私の予測が始まらなかったように思えるでしょう。

私のデータセット(トレーニング/テスト)は2つの異なるファイルにあります。最初は私のトレーニングセットを練習します(便宜上、100分で終了し、テストセットは101分に開始しましょう)。私のモデルは私の予測を保存したら、通常は101を予測するか、どこか間違っているはずです?私の訓練が止まった後の道のりを予測するようになってきているように思えるので(私の例を残しておくと、たとえば価値107を予測し始めるだろう)。

今のところ、悪い修正の1つは、トレーニングセットから、私が遅れていたほどの価値を取り除くことでした(この例では7となるでしょう)。私はこの問題を抱えているか、後で起こらないように修正する方法を持っています。

私のトレーニングデータセットにはギャップがあるようです(この場合はタイムスタンプがありません)、問題が発生する可能性があります。いくつかの問題がありました(データセット全体の約7〜9%欠落していました)私はパンダを使用して欠落したタイムスタンプを追加しました(最後のタイムスタンプの輻輳値も与えました)一方、少しは助けたかもしれないと思っています問題を修正しました。

私は多段階予測、多変量予測、LSTM、GRU、MLP、Tensorflow、Tflearnを試しましたが、それは何も変わって私の訓練から来ると思うことはできません。 私のモデルトレーニングです。

def fit_lstm(train, batch_size, nb_epoch, neurons): 
    X, y = train[:, 0:-1], train[:, -1] 
    X = X.reshape(X.shape[0], 1, X.shape[1]) 
    print X.shape 
    print y.shape 

    model = Sequential() 
    model.add(LSTM(neurons, batch_input_shape=(None, X.shape[1], X.shape[2]), stateful=False)) 
    model.add(Dense(1)) 
    model.compile(loss='mean_squared_error', optimizer='adam') 
    for i in range(nb_epoch): 
     model.fit(X, y, epochs=1, batch_size=batch_size, verbose=0, shuffle=False) 
     model.reset_states() 
    return model 

2形状は、(この例では私は80Kのを

(80485、1、1)

(80485)

使用してい速度目的のための訓練としてのデータ)。

私は1つのニューロン、64のbatch_sizeと5エポックを使用しています。 私のデータセットは2つのファイルで構成されています。最初に2列のトレーニングファイルがあります:

タイムスタンプ|値

2番目のものは同じ形状ですが、テストセットです(予測に影響を与えないように区切られています)。ファイルは予測が行われるたびに1回のみ使用され、現実と予測を比較します。テストセットは、トレーニングセットが停止する場所から開始されます。

あなたはこの問題の原因が何であるか考えていますか?

編集:私のコードで 私はこの機能を持っている:

# invert differencing 
    yhat = inverse_difference(raw_values, yhat, len(test_scaled)+1-i) 
# invert differenced value 
def inverse_difference(history, yhat, interval=1): 
    return yhat + history[-interval] 

(実際のいずれかにスケーリングされた値から行くために)差が反転するようになっています。 貼り付けられた例(テストセットを使用)のように使用すると、95%以上の精度と完全な精度が得られます。 Using the testing set to inverse the difference

実際には、私はこの値を変更しなければならないことを知りませんでした。 最初にトレーニングセットを使用しようとしましたが、この投稿で説明されている問題がありました。 Using the training set

どうしてですか?この問題の説明はありますか?

答えて

0

見つけました。これは "def inverse_difference(history、yhat、interval = 1):"関数の問題でした。実際、それは私の結果を私の最後のトレーニングのように見せます。これは、私のデータにパターンがあるので(なぜなら、常に同じピークにピークを迎える)、ギャップがあったからです。私は、トレーニングから値を戻している間に予測していると思っていました。