網絡流量預測入門(三)之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進行小波變換,然后將小波變換后的結果進行訓練。在預測的過程中,將預測結果進行反小波變換恢復成網絡流量時間序列,可以有效的消除網絡流量突變造成的影響。如果有興趣,值得試一試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM