異常檢測的問題
異常檢測問題一般是這樣的。
也就是說通過給定的無標籤數據的統計特徵,建立概率模型。然後用該概率模型來預測那些數據是異常的,即這些數據的出現概率很低。
比如網站需要檢測異常用戶,它就需要記錄用戶的登陸頻率,訪問某個頁面的次數,論壇發帖的次數,用戶的打字速度等等,然後用這幾個維度建立一個統一的概率模型,然後就可以判斷新的用戶是否存在異常。
異常檢測算法
對於每個特徵都構建一個正態分佈的概率函數,然後總的概率就取這些概率的乘積。即便存在非獨立的情況,這個算法也大體上能正常工作。
評估異常檢測算法
要評估這個算法,就需要有帶標籤的數據用作交叉驗證集和測試集。這一點和有監督的學習算法又有點像。
假設又10000個正常的樣本和20個異常的樣本。
那麼,可以設置6000個正常的樣本用作訓練集,然後取2000個正常樣本和10個異常樣本用作交叉驗證集,剩下的2000個正常樣本和另10個異常樣本用作測試集。
可用的評價指標包括
測準率和召回率或者F1-score等。
何時使用異常檢測算法
當你的樣本中有大量的正常樣本和極少數的異常樣本時,使用異常檢測算法的效果比使用有監督學習算法更有效。
假如將來出現的異常樣本的原因可能與當前的異常原因不同,那麼對於這種新異常,用異常檢測算法效果更好。
如何選擇特徵
假如某個特徵的直方圖呈高斯分佈,那麼這個特徵比較適合用於異常檢測。假如某些特徵分佈的兩邊不對稱,可以採用log(x+C)處理。或者指數處理。
假如使用異常檢測算法,某個異常樣本獲得了一個較高的概率,那麼就需要檢視特徵是否足夠合理,或者是否需要增加新的特徵,用來區分出這個異常樣本。例如兩個特徵的商或者乘積等等。
多維高斯分佈
有時候兩個特徵之間具有一定的相關性,用之前的建模方法可能需要多次嘗試不同的新特徵,才能建立合理的模型。如果採用多維高斯分佈模型,可以直接把相關性考慮到模型中去。建立的模型更加精確。以下是兩維高斯分佈的協方差矩陣對最終概率分佈的影響。非常直觀,建議收藏。
應用場景
那麼是否可以用多維高斯分佈取代之前的異常檢測算法(不考慮相關性)呢?顯然不行。
當特徵較少(m>10n)時,可以考慮多維高斯分佈。當特徵非常多時,可以考慮不考慮相關性的異常檢測算法,通過構建新的特徵來處理相關性。因為特徵多的時候,協方差矩陣求逆將是一個非常好運算量的事情,另外協方差矩陣還存在不可求逆的可能。