<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Keras 中深度學習的時間序列預測 > 原文: [https://machinelearningmastery.com/time-series-prediction-with-deep-learning-in-python-with-keras/](https://machinelearningmastery.com/time-series-prediction-with-deep-learning-in-python-with-keras/) 時間序列預測是框架和機器學習解決的難題。 在這篇文章中,您將了解如何使用 Keras 深度學習庫在 Python 中開發用于時間序列預測的神經網絡模型。 閱讀這篇文章后你會知道: * 關于航空公司乘客單變量時間序列預測問題。 * 如何將時間序列預測作為回歸問題,并為其開發神經網絡模型。 * 如何構建具有時滯的時間序列預測,并為其開發神經網絡模型。 讓我們開始吧。 * **2016 年 10 月更新**:用更準確的版本替換圖表,評論了第一種方法的有限表現。 * **2017 年 3 月更新**:更新了 Keras 2.0.2,TensorFlow 1.0.1 和 Theano 0.9.0 的示例。 ## 問題描述 我們將在這篇文章中看到的問題是國際航空公司乘客預測問題。 這是一個問題,給定一年零一個月,任務是以 1,000 為單位預測國際航空公司乘客的數量。數據范圍從 1949 年 1 月到 1960 年 12 月或 12 年,共有 144 個觀測值。 該數據集可從 [DataMarket 網頁免費下載,作為 CSV 下載](https://datamarket.com/data/set/22u3/international-airline-passengers-monthly-totals-in-thousands-jan-49-dec-60#!ds=22u3&display=line),文件名為“ _international-airline-passengers.csv_ ”。 下面是該文件前幾行的示例。 ```py "Month","International airline passengers: monthly totals in thousands. Jan 49 ? Dec 60" "1949-01",112 "1949-02",118 "1949-03",132 "1949-04",129 "1949-05",121 ``` 我們可以使用 Pandas 庫輕松加載此數據集。鑒于每個觀察以一個月的相同間隔分開,我們對日期不感興趣。因此,當我們加載數據集時,我們可以排除第一列。 下載的數據集還有頁腳信息,我們可以將 **skipfooter** 參數排除到 **pandas.read_csv()**為 3 頁腳行設置為 3。加載后,我們可以輕松繪制整個數據集。下面列出了加載和繪制數據集的代碼。 ```py import pandas import matplotlib.pyplot as plt dataset = pandas.read_csv('international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3) plt.plot(dataset) plt.show() ``` 您可以在情節中看到上升趨勢。 您還可以看到數據集的某些周期性,這可能與北半球夏季假期相對應。 ![Plot of the Airline Passengers Dataset](https://img.kancloud.cn/a6/ab/a6ab6b3ed20c8ccc87827a2b08d8769c_800x600.jpg) 航空公司乘客數據集的情節 我們將保持簡單并按原樣處理數據。 通常,研究各種數據準備技術以重新調整數據并使其靜止是一個好主意。 ## 多層感知器回歸 我們想將時間序列預測問題表述為回歸問題。 也就是說,考慮到本月的乘客人數(以千人為單位),下個月的乘客數量是多少。 我們可以編寫一個簡單的函數將我們的單列數據轉換為兩列數據集。第一列包含本月的(t)乘客數,第二列包含下個月的(t + 1)乘客數,需要預測。 在我們開始之前,讓我們首先導入我們打算使用的所有函數和類。這假設一個工作的 SciPy 環境安裝了 Keras 深度學習庫。 ```py import numpy import matplotlib.pyplot as plt import pandas from keras.models import Sequential from keras.layers import Dense ``` 在我們做任何事情之前,最好修復隨機數種子以確保我們的結果可重復。 ```py # fix random seed for reproducibility numpy.random.seed(7) ``` 我們還可以使用上一節中的代碼將數據集作為 Pandas 數據幀加載。然后,我們可以從數據幀中提取 NumPy 數組,并將整數值轉換為更適合使用神經網絡建模的浮點值。 ```py # load the dataset dataframe = pandas.read_csv('international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3) dataset = dataframe.values dataset = dataset.astype('float32') ``` 在我們對數據建模并估計模型在訓練數據集上的技能之后,我們需要了解模型在新的看不見的數據上的技能。對于正常的分類或回歸問題,我們將使用交叉驗證來完成此操作。 對于時間序列數據,值的序列很重要。我們可以使用的一種簡單方法是將有序數據集拆分為訓練和測試數據集。下面的代碼計算分裂點的索引,并將數據分成訓練數據集,其中 67%的觀測值可用于訓練我們的模型,剩余的 33%用于測試模型。 ```py # split into train and test sets train_size = int(len(dataset) * 0.67) test_size = len(dataset) - train_size train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] print(len(train), len(test)) ``` 現在我們可以定義一個函數來創建一個新的數據集,如上所述。該函數有兩個參數,數據集是我們想要轉換成數據集的 NumPy 數組,而 **look_back** 是用作預測下一個時間段的輸入變量的先前時間步數,在這種情況下,默認為 1。 此默認值將創建一個數據集,其中 X 是給定時間(t)的乘客數量,Y 是下次乘客的數量(t + 1)。 它可以配置,我們將在下一節中介紹構建不同形狀的數據集。 ```py # convert an array of values into a dataset matrix def create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return numpy.array(dataX), numpy.array(dataY) ``` 讓我們看看這個函數對數據集的前幾行的影響。 ```py X Y 112 118 118 132 132 129 129 121 121 135 ``` 如果將前 5 行與上一節中列出的原始數據集樣本進行比較,則可以在數字中看到 X = t 和 Y = t + 1 模式。 讓我們使用這個函數來準備準備建模的訓練和測試數據集。 ```py # reshape into X=t and Y=t+1 look_back = 1 trainX, trainY = create_dataset(train, look_back) testX, testY = create_dataset(test, look_back) ``` 我們現在可以在訓練數據中使用多層感知器模型。 我們使用一個簡單的網絡,1 個輸入,1 個隱藏層,8 個神經元和一個輸出層。使用均方誤差擬合模型,如果我們取平方根,則以數據集為單位給出誤差分數。 我嘗試了一些粗略的參數并確定了下面的配置,但絕不是網絡列出了優化。 ```py # create and fit Multilayer Perceptron model model = Sequential() model.add(Dense(8, input_dim=look_back, activation='relu')) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(trainX, trainY, epochs=200, batch_size=2, verbose=2) ``` 一旦模型擬合,我們就可以估計模型在訓練和測試數據集上的表現。這將為我們提供新模型的比較點。 ```py # Estimate model performance trainScore = model.evaluate(trainX, trainY, verbose=0) print('Train Score: %.2f MSE (%.2f RMSE)' % (trainScore, math.sqrt(trainScore))) testScore = model.evaluate(testX, testY, verbose=0) print('Test Score: %.2f MSE (%.2f RMSE)' % (testScore, math.sqrt(testScore))) ``` 最后,我們可以使用模型為訓練和測試數據集生成預測,以獲得模型技能的直觀指示。 由于數據集是如何準備的,我們必須改變預測,以便它們在 x 軸上與原始數據集一致。準備好后,繪制數據,以藍色顯示原始數據集,以綠色顯示訓練數據集的預測,以紅色顯示未見測試數據集的預測。 ```py # generate predictions for training trainPredict = model.predict(trainX) testPredict = model.predict(testX) # shift train predictions for plotting trainPredictPlot = numpy.empty_like(dataset) trainPredictPlot[:, :] = numpy.nan trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict # shift test predictions for plotting testPredictPlot = numpy.empty_like(dataset) testPredictPlot[:, :] = numpy.nan testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict # plot baseline and predictions plt.plot(dataset) plt.plot(trainPredictPlot) plt.plot(testPredictPlot) plt.show() ``` 我們可以看到該模型在擬合訓練和測試數據集方面做得很差。它基本上預測了與輸出相同的輸入值。 ![Naive Time Series Predictions With Neural Network](https://img.kancloud.cn/03/13/03139c0e0b5cfe3cf9f43321d51d582f_800x600.jpg) 神經網絡的原始時間序列預測 藍色=整個數據集,綠色=訓練,紅色=預測 為完整起見,以下是整個代碼清單。 ```py # Multilayer Perceptron to Predict International Airline Passengers (t+1, given t) import numpy import matplotlib.pyplot as plt import pandas import math from keras.models import Sequential from keras.layers import Dense # fix random seed for reproducibility numpy.random.seed(7) # load the dataset dataframe = pandas.read_csv('international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3) dataset = dataframe.values dataset = dataset.astype('float32') # split into train and test sets train_size = int(len(dataset) * 0.67) test_size = len(dataset) - train_size train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] print(len(train), len(test)) # convert an array of values into a dataset matrix def create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return numpy.array(dataX), numpy.array(dataY) # reshape into X=t and Y=t+1 look_back = 1 trainX, trainY = create_dataset(train, look_back) testX, testY = create_dataset(test, look_back) # create and fit Multilayer Perceptron model model = Sequential() model.add(Dense(8, input_dim=look_back, activation='relu')) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(trainX, trainY, epochs=200, batch_size=2, verbose=2) # Estimate model performance trainScore = model.evaluate(trainX, trainY, verbose=0) print('Train Score: %.2f MSE (%.2f RMSE)' % (trainScore, math.sqrt(trainScore))) testScore = model.evaluate(testX, testY, verbose=0) print('Test Score: %.2f MSE (%.2f RMSE)' % (testScore, math.sqrt(testScore))) # generate predictions for training trainPredict = model.predict(trainX) testPredict = model.predict(testX) # shift train predictions for plotting trainPredictPlot = numpy.empty_like(dataset) trainPredictPlot[:, :] = numpy.nan trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict # shift test predictions for plotting testPredictPlot = numpy.empty_like(dataset) testPredictPlot[:, :] = numpy.nan testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict # plot baseline and predictions plt.plot(dataset) plt.plot(trainPredictPlot) plt.plot(testPredictPlot) plt.show() ``` 運行模型會生成以下輸出。 ```py Epoch 195/200 0s - loss: 536.7014 Epoch 196/200 0s - loss: 555.4216 Epoch 197/200 0s - loss: 552.2841 Epoch 198/200 0s - loss: 541.2220 Epoch 199/200 0s - loss: 542.3288 Epoch 200/200 0s - loss: 534.2096 Train Score: 532.59 MSE (23.08 RMSE) Test Score: 2358.07 MSE (48.56 RMSE) ``` 根據表現估計的平方根,我們可以看到該模型在訓練數據集上有 23 名乘客(以千計)的平均誤差,在測試數據集上有 48 名乘客(以千計)。 ## 多層感知器使用窗口方法 我們還可以對問題進行短語,以便可以使用多個最近的時間步驟來對下一個時間步進行預測。 這稱為窗口方法,窗口的大小是可以針對每個問題調整的參數。 例如,給定當前時間(t)我們想要預測序列中下一次的值(t + 1),我們可以使用當前時間(t)以及前兩次(t-1 和 T-2)。 當表達為回歸問題時,輸入變量為 t-2,t-1,t,輸出變量為 t + 1。 我們在上一節中編寫的 **create_dataset()**函數允許我們通過將 **look_back** 參數從 1 增加到 3 來創建時間序列問題的這個公式。 具有此秘籍的數據集樣本如下所示: ```py X1 X2 X3 Y 112 118 132 129 118 132 129 121 132 129 121 135 129 121 135 148 121 135 148 148 ``` 我們可以使用更大的窗口大小重新運行上一節中的示例。我們將增加網絡容量來處理附加信息。第一個隱藏層增加到 14 個神經元,第二個隱藏層增加了 8 個神經元。時代數也增加到 400。 為了完整性,下面列出了僅包含窗口大小更改的整個代碼清單。 ```py # Multilayer Perceptron to Predict International Airline Passengers (t+1, given t, t-1, t-2) import numpy import matplotlib.pyplot as plt from pandas import read_csv import math from keras.models import Sequential from keras.layers import Dense # convert an array of values into a dataset matrix def create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return numpy.array(dataX), numpy.array(dataY) # fix random seed for reproducibility numpy.random.seed(7) # load the dataset dataframe = read_csv('international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3) dataset = dataframe.values dataset = dataset.astype('float32') # split into train and test sets train_size = int(len(dataset) * 0.67) test_size = len(dataset) - train_size train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] # reshape dataset look_back = 3 trainX, trainY = create_dataset(train, look_back) testX, testY = create_dataset(test, look_back) # create and fit Multilayer Perceptron model model = Sequential() model.add(Dense(12, input_dim=look_back, activation='relu')) model.add(Dense(8, activation='relu')) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(trainX, trainY, epochs=400, batch_size=2, verbose=2) # Estimate model performance trainScore = model.evaluate(trainX, trainY, verbose=0) print('Train Score: %.2f MSE (%.2f RMSE)' % (trainScore, math.sqrt(trainScore))) testScore = model.evaluate(testX, testY, verbose=0) print('Test Score: %.2f MSE (%.2f RMSE)' % (testScore, math.sqrt(testScore))) # generate predictions for training trainPredict = model.predict(trainX) testPredict = model.predict(testX) # shift train predictions for plotting trainPredictPlot = numpy.empty_like(dataset) trainPredictPlot[:, :] = numpy.nan trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict # shift test predictions for plotting testPredictPlot = numpy.empty_like(dataset) testPredictPlot[:, :] = numpy.nan testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict # plot baseline and predictions plt.plot(dataset) plt.plot(trainPredictPlot) plt.plot(testPredictPlot) plt.show() ``` 運行該示例提供以下輸出。 ```py Epoch 395/400 0s - loss: 485.3482 Epoch 396/400 0s - loss: 479.9485 Epoch 397/400 0s - loss: 497.2707 Epoch 398/400 0s - loss: 489.5670 Epoch 399/400 0s - loss: 490.8099 Epoch 400/400 0s - loss: 493.6544 Train Score: 564.03 MSE (23.75 RMSE) Test Score: 2244.82 MSE (47.38 RMSE) ``` 我們可以看到,與上一節相比,誤差沒有明顯減少。 查看圖表,我們可以在預測中看到更多結構。 同樣,窗口大小和網絡架構沒有調整,這只是如何構建預測問題的演示。 根據績效分數的平方根,我們可以看到訓練數據集的平均誤差為 23 名乘客(每月數千人),未見測試集的平均誤差為 47 名乘客(每月數千人)。 ![Window Method For Time Series Predictions With Neural Networks](https://img.kancloud.cn/3d/86/3d8678c2c118d388b806d086558fb469_800x600.jpg) 使用神經網絡的時間序列預測的窗口方法 藍色=整個數據集,綠色=訓練,紅色=預測 ## 摘要 在這篇文章中,您了解了如何使用 Keras 深度學習庫為時間序列預測問題開發神經網絡模型。 完成本教程后,您現在知道: * 關于國際航空公司旅客預測時間序列數據集。 * 如何將時間序列預測問題構建為回歸問題并開發神經網絡模型。 * 如何使用窗口方法構建時間序列預測問題并開發神經網絡模型。 您對神經網絡或此帖的時間序列預測有任何疑問嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看