異常檢測(也稱為離群點檢測)是檢測異常實例的任務,異常實例與常規實例非常不同。這些實例稱為異常或離群值,而正常實例稱為內部值。
異常檢測可用于多種應用,例如:
① 欺詐識別
② 檢測制造中的缺陷產品
③ 數據清理——在訓練另一個模型之前從數據集中去除異常值。
你可能已經注意到,一些不平衡分類的問題也經常使用異常檢測算法來解決。例如,垃圾郵件檢測任務可以被認為是一個分類任務(垃圾郵件比普通電子郵件少得多),但是我們可以用異常檢測的方法實現這個任務。
一個相關的任務是奇異值檢測(Novelty Detection)。它與異常檢測的不同之處在于,假設該算法是在干凈的數據集(沒有異常值)上訓練的。它被廣泛應用于在線學習中,當需要識別一個新實例是否是一個離群值時。
另一個相關任務是密度估計。它是估計數據集生成的隨機過程的概率密度函數的任務。密度估計通常用于異常檢測(位于低密度區域的實例很可能是異常)和數據分析。通常使用基于密度(高斯混合模型或 DBSCAN)的聚類算法來解決。
統計方法
檢測離群值最簡單的方法是嘗試統計方法,這是很久以前開發出來的。其中最流行的一種方法被稱為離群值檢測Tukey方法(或四分位數距離IQR) 。
它的本質是計算百分位數和四分位數之間的范圍。位于Q1-1.5 * IQR之前和Q3 + 1.5 * IQR之后的數據點被認為是異常值。下面你可以看到一個使用人的身高數據集的例子。高度低于54.95英寸(139厘米)和高于77.75英寸(197厘米)被認為是異常值。
這種和其他統計方法(用于檢測異常值的 z-score 方法等)通常用于數據清理。
聚類和降維算法
另一種簡單、直觀且通常有效的異常檢測方法是使用一些聚類算法(如高斯混合模型和 DBSCAN)來解決密度估計任務。那么,任何位于低密度區域的實例都可以被認為是異常,我們只需要設置一些密度閾值。
此外,可以使用任何具有 inverse_transform() 方法的降維算法。這是因為異常的重建誤差總是比正常實例的重建誤差大得多。
孤立森林和 SVM
一些監督學習算法也可用于異常檢測,其中最流行的兩種是孤立森林和 SVM。這些算法更適合奇異值檢測,但通常也適用于異常檢測。
孤立森林算法構建了一個隨機森林,其中每個決策樹都是隨機生長的。每走一步,這片森林就會隔離越來越多的點,直到所有點都變得孤立。由于異常位于遠離通常數據點的位置,因此它們通常比正常實例以更少的步驟被孤立。該算法對于高維數據表現良好,但需要比 SVM 更大的數據集。
SVM(在我們的例子中是一類 SVM)也廣泛用于異常檢測。內核化 SVM 可以構建一個有效的“限制超平面”,它將正常點與異常點分開。像任何 SVM 修改一樣,它可以很好地處理高維或稀疏數據,但僅適用于中小型數據集。
局部異常因子
局部異常值因子 (LOF) 算法基于異常位于低密度區域的假設。它不只是設置密度閾值(就像我們可以用 DBSCAN 做的那樣),而是將某個點的密度與其最近鄰居的 k 的密度進行比較。如果這個特定點的密度比它的鄰點低得多(這意味著它離它們很遠),它被認為是一個異常。
該算法既可用于異常檢測,也可用于奇異值檢測。由于其計算簡單且質量好,會被經常使用。
最小協方差行列式
最小協方差行列式(MCD 或其修改型 Fast-MCD)可用于異常值檢測,尤其是在數據清理的時候。它假設內點是從單個高斯分布中生成的,而離群點不是從這個分布中生成的。由于許多數據具有正態分布(或可以簡化為正態分布),因此該算法通常表現良好。在 sklearn 中EllipticEnvelope類就是它的實現。
如何選擇異常檢測算法?
如果你需要清理數據集,你應該首先嘗試經典的統計方法,比如 Tukey Method for Outlier Detection。如果知道數據分布是高斯分布 則可以使用Fast-MCD,。
如果你做異常檢測不是為了數據清理,首先試試簡單快速的LOF。如果它不能很好地工作(或者如果你出于某種原因需要分離超平面)——根據你的任務和數據集嘗試其他算法:
用于稀疏高維數據的單類SVM 或用于連續高維數據的孤立森林
如果可以假設數據是由多個高斯分布的混合生成的,可以試試高斯混合模型
責任編輯:haq
-
數據
+關注
關注
8文章
7067瀏覽量
89125 -
異常檢測
+關注
關注
1文章
42瀏覽量
9748 -
模型
+關注
關注
1文章
3254瀏覽量
48889
原文標題:10分鐘掌握異常檢測
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論