奇異點、異常點檢查
定義:
1)、novelty detection:當訓練數據中沒有離群點,我們的目標是用訓練好的模型去檢測另外新發現的樣本;
2)、outlier detection:當訓練數據中包含離群點,模型訓練時要匹配訓練數據的中心樣本,忽視訓練樣本中的其它異常點;
sklearn提供了一些機器學習方法,可用於奇異(Novelty )點或異常(Outlier)點檢測,包括OneClassSVM、Isolation Forest、Local Outlier Factor (LOF) 等。其中OneClassSVM可用於Novelty Detection,而后兩者可用於Outlier Detection。
One-Class SVM:
利用One-Class SVM,它有能力捕獲數據集的形狀,因此對於強非高斯數據有更加優秀的效果,例如兩個截然分開的數據集。嚴格來說,一分類的SVM並不是一個異常點監測算法,而是一個奇異點檢測算法:它的訓練集不能包含異常樣本,否則的話,可能在訓練時影響邊界的選取。但是,對於高維空間中的樣本數據集,如果它們做不出有關分布特點的假設,One-class SVM將是一大利器。
嚴格地講,OneClassSVM不是一種outlier detection方法,而是一種novelty detection方法:它的訓練集不應該摻雜異常點,因為模型可能會去匹配這些異常點。 但在數據維度很高,或者對相關數據分布沒有任何假設的情況下,OneClassSVM也可以作為一種很好的outlier detection方法
Isolation Forest:
孤立森林是一個高效的異常點監測算法。SKLEARN提供了ensemble.IsolationForest模塊。該模塊在進行檢測時,會隨機選取一個特征,然后在所選特征的最大值和最小值隨機選擇一個分切面。該算法下整個訓練集的訓練就像一顆樹一樣,遞歸的划分。划分的次數等於根節點到葉子節點的路徑距離d。所有隨機樹(為了增強魯棒性,會隨機選取很多樹形成森林)的d的平均值,就是我們檢測函數的最終結果。
那些路徑d比較小的,都是因為距離主要的樣本點分布中心比較遠的。也就是說可以通過尋找最短路徑的葉子節點來尋找異常點。它的例子也放在后面。
Local Outlier Factor
Local Outlier Factor(LOF)是基於密度的經典算法(Breuning et.al. 2000), 文章發表於 SIGMOD 2000, 到目前已經有 3000+ 的引用。在 LOF 之前的異常檢測算法大多是基於統計方法的,或者是借用了一些聚類算法用於異常點的識別(比如 ,DBSCAN,OPTICS)。但是,基於統計的異常檢測算法通常需要假設數據服從特定的概率分布,這個假設往往是不成立的。而聚類的方法通常只能給出 0/1 的判斷(即:是不是異常點),不能量化每個數據點的異常程度。相比較而言,基於密度的LOF算法要更簡單、直觀。它不需要對數據的分布做太多要求,還能量化每個數據點的異常程度(outlierness)。具體算法思想見參考【3】,【4】
Reference
【1】http://scikit-learn.org/stable/auto_examples/svm/plot_oneclass.html
【2】https://blog.csdn.net/sinat_26917383/article/details/76647272
【3】https://yq.aliyun.com/articles/152627?t=t1
【4】 https://blog.csdn.net/wangyibo0201/article/details/51705966