利用上篇運維指令不用記,會用SQL就可以,可對CPU信息進行採集並結合機器學習算法對CPU的利用率進行預測,從而讓運維人員及時瞭解CPU未來運轉情況,從容應對突發問題。
一、預測方法簡述
預測算法屬於監督式機器學習領域,因爲他需要對歷史數據進行訓練並建立基於時間序列的迴歸模型。
一般情況下時間序列主要分爲:趨勢、季節、週期三個方面。
- 趨勢:爲變化的長期方向,不受相對較小波動和擾動影響;
- 季節:與數據性質密切相關,如:晝夜,春、夏、秋、冬等;
- 週期:數據中有相似模式但週期性不同的一般變化,如股市的週期(股票上漲下跌的一個循環)、房價週期等。
預測是執行異常檢測的有效方法,特別是其時間序列相對穩定,相對兩種算法,ARIMA可以可靠地進行預測。LSTM網絡對於更復雜的時間序列數據有更好的包容性。預測不適合離羣點檢測。
ARIMA:自迴歸模型是一種統計模型,其輸出結果線性依賴與先前值,是一種強大靈活的時間序列預測方法。
LSTM:遞歸神經網絡的變體,特別適合學習基於時間序列的分類和預測。
如果時間序列不穩定,沒有遵循任何可觀察的趨勢,或者波動幅度變化很大,那麼預測效果將不會表現良好,預測對一維數據效果最好,如果需要預測多維數據,最好使用其他檢測方法。
二、代碼解讀
基礎環境
本文基於python實現,所以讀者需要具備python環境。
具體使用類。如下圖:
項目使用類
語料集信息共分爲測試集(cpu-test-a.csv)、訓練集(cpu-train-a.csv)、全部集(cpu-full-a.csv)三個方面。測試集主要用戶CPU利用率預測驗證,訓練集用戶CPU利用率訓練,全部集=測試集+訓練集。具體語料內容如下圖:
CPU語料集
讀取信息
通過分析結構化數據的工具集pandas獲取全部集、訓練集與測試集的文件內容。
讀取語料信息
訓練數據圖形化輸出
通過matplotlib.pyplot將訓練集內容輸出,輸出代碼如下:
圖形化輸出-代碼
其中第一行爲定義圖形化的高度與寬度;第二行爲定義製作圖形,X軸爲日期,Y軸爲CPU,顏色爲黑色;第三行顯示Y軸的lable信息。第四行顯示圖形化的title信息。輸出效果如下:
圖形化輸出-效果
建立簡單的ARIMAX模型
ARIMA模型
第一行爲定義模型。已經穩定的序列具有0階差分;向上或向下穩定趨勢(恆定平穩)應具有1階差分,最高爲2階。差分其主要爲讓序列平穩化。第二行爲使用Metropolis-Hastings算法進行推理。第三行爲繪製ARIMA模型的擬合圖。
通過繪製後的模擬擬合圖,我們可直觀瞭解在基於訓練集的模型擬合效果不錯。
擬合圖
測試集樣本預測
我們選擇60個預測值及其置信區間來繪製最近100個觀測點。
預測
輸出效果如下(顏色越深代表置信度越高):
測試集-ARIMA預測
測試集樣輸出
將整體數據集輸出,在測試數據中加入背景方便與圖“測試集-ARIMA預測”進行數值比對。
測試樣本輸出
輸出效果如下(全部集樣本輸出,背景灰色爲測試集數據。):
樣本輸出
通過“樣本輸出”圖片與“測試集-ARIMA預測”圖比較,兩者數據基本是準確的。
本章有很多待完善地方,希望自己可繼續改進。另外在選擇算法之前需要優先考量數據質量,數據如果污染則嚴重影響檢測方法。