網絡流量預測入門(三)之LSTM預測網絡流量

網絡流量預測入門(三)之LSTM預測網絡流量

在上篇博客LSTM機器學習生成音樂中,介紹瞭如何使用LSTM生成音樂,而在上上篇網絡流量預測入門(二)之LSTM介紹中,介紹了LSTM的基本原理

在這篇博客中,將介紹如何使用SVR和LSTM對網絡流量進行預測。

環境版本信息:

  • keras:2.4.3
  • numpy:1.19.2
  • tensorflow:2.4.1
  • sklearn:0.23.2

項目地址:network-traffic-predict

數據集介紹

數據集來自歐洲11個城市的ISP互聯網流量(用ec_data表示)和英國學術網流量(用uk_data表示),數據集見Github

ec_data統計了從2005年7月6號至2005年7月28號共計14772組網絡流量數據,uk_data統計了從2004年11月19號至2005年1月27號共計19888組網絡數據。ec_data和uk_data都是以5分鐘爲間隔進行採樣得到的數據,數據見下圖。由圖中可以看出,ec_data和uk_data具有很強的週期性以及規律性,因此可以大膽的搏一搏單車變摩托:LSTM在預測的時候能夠有着比較好的結果。

預測流程

在這篇博客中,使用前10個序列去預測下一個時間序列的網絡流量值。當然,也可以如同簡單明朗的 RNN 寫詩教程一樣,通過前10個序列去預測後面\(N\)個序列的網絡流量值,如下圖所示。

數據集準備

流量預測的目的是使用前\(K\)個序列去預測後面\(N\)個序列(這篇博客\(K=10,N=1\)),從機器學習訓練的角度去看,前\(K\)個序列爲\(X\),後面\(N\)個序列則爲\(Y\)。因此,需要從網絡流量數據中構建數據集。構建數據集的過程原理在簡單明朗的 RNN 寫詩教程詳細說過,以詩爲例,過程如下:

通過上面的操作,就可以將網絡流量序列變成X_Data和Y_Data,部分代碼如下:

# all_data 即爲數據集,sequence_len即爲K
sequence_len = 10
X = []
Y = []
for i in range(len(all_data)-sequence_len):
    X.append(all_data[i:i+sequence_len])
    Y.append(all_data[i+sequence_len])
X = np.array(X)
Y = np.array(Y)

SVR預測

SVR使用sklearn提供的默認參數,默認參數設置如下:

超參數 取值
kernel rbf
gamma scale
tol 0.001
C 1.0

代碼見:Github,使用SVR進行預測還是挺簡單的,看看代碼就能夠看懂了。

預測結果圖如下圖所示:

  • ec_data:MAPE=0.095

  • uk_data:MAPE=0.084

LSTM 預測

LSTM的模型結構如下圖所示,是一個很簡單的雙層LSTM網絡,並沒有加入一些特殊的結構。

代碼見:Github

預測結果:

  • ec_data:MAPE=0.040

  • uk_data:MAPE=0.035

優化點

可以將uk_data和ec_data進行小波變換,然後將小波變換後的結果進行訓練。在預測的過程中,將預測結果進行反小波變換恢復成網絡流量時間序列,可以有效的消除網絡流量突變造成的影響。如果有興趣,值得試一試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章