有了以前的鋪墊和理論,本文就用一些現實中的實際數據進行一些具體的算法的應用。數據爲網絡訪問日誌文件,主要選擇了單位時間內的訪問請求次數與單位訪問中的動做數做爲二維特徵,而且便於可視化的顯示,下面分別進行三種異常算法嘗試:算法
1. K-means:編程
算法原理:根據特徵向量之間的距離度量進行無監督的訓練樣本聚類。選定聚類數K,隨機選擇初始點,並根據距離肯定訓練數據點的聚類標籤,而後從新計算聚類中心,不斷迭代每一個樣本點的距離,並從新賦值標籤,直到算法收斂或迭代至參數值微信
能夠看出一些紅色的點更遠的偏離了總體樣本點的中心,做爲異常點的機率更大網絡
2. OneClassSVM:框架
算法原理:根據對已有支持向量機的理解,算法並不是對已有標籤的數據進行分類判別,而是經過回答:yes or no的方式去根據支持向量域描述(support vector domaindescription SVDD),將樣本數據訓練出一個最小的超球面(大於3維特徵),其中在二維中是一個曲線,將數據所有包起來,即將異常點排除。Sklearn包中給出的demo實驗結果如圖:能夠看出在不一樣的數據分佈下會有一些不同的偏差,其中調整參數中有一個比較重要的nu,表示異常點比例,默認值爲0.5dom
在一樣的數據特徵維度下,直接調用sklearn包,其中設置nu=0.15學習
實驗結果以下:測試
其中第二張是放大以後的圖。能夠看出,OneClassSVM在對這樣數據分佈中,並不能更好的發揮做用,綠色點中的紅色偏差點有一些莫名其妙;但至少在nu=0.15參數下,能夠將Kmeans中的紅色聚類點區分出。網站
3. Isolation Forest(iforest)算法:spa
算法原理:這個算法是由周志華老師提出,面對高維數據依然有效快速,在網站異常數據檢測的比賽中得到過不錯的名次。其主要的算法原理簡潔有效,如圖所示:
根據樹的結構能夠有效的進行二分法,劃歸一個點是否離羣異常,能夠根據劃分這個點的次數去判斷,再加入森林集成算法進行投票,使算法的泛化能力更強。
在最新版本的sklearn0.18 中集成有iforest,但實驗環境下的anaconda的安裝包不是最新版本。最終進行算法原理編程獲得如圖結果,異常值比例爲0.15
能夠看出在與kmeans的比較中,將第一類藍色點的邊界更加縮小,但在一些位置上並未判別出離羣,做爲非監督學習方法,最終仍是須要依據新的數據和標籤去確認聚類的準確率。
4. 時間序列異常檢測:
根據一些業務需求,除了對每次數據點進入框架內作出算法的判斷評價,更重要是根據歷史數據,進行長期的時間序列監控預警。
根據目前的已有日誌信息,主要是時間戳和響應時長;須要進行每分鐘的請求次數以及相應的響應時長,首先先按照3歐米伽指標進行簡單測試:
但這些簡單的統計指標對於某些異常狀況並不能檢測,還須要加入多種相似曲線指標:協助檢測週期性異常、極大值異常點、極小值異常點和空段點,如圖所示:
對於時間序列模型如:AM、ARMA和高斯分佈參數估計等算法進行進一步處理。有待讀者和小編一塊兒學習~
本文分享自微信公衆號 - 智能算法(AI_Algorithm)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。