1. 程式人生 > >【Scikit-Learn 中文文件】新異類和異常值檢測

【Scikit-Learn 中文文件】新異類和異常值檢測

2.11. 新異類和異常值檢測

許多應用需要能夠判斷新觀測是否屬於與現有觀測相同的分佈(它是一個非線性的),或者應該被認為是不同的(這是一個異常值)。 通常,這種能力用於清理實際的資料集。 必須做出兩個重要的區別:

新奇檢測: 訓練資料不被異常值汙染,我們有興趣檢測新觀察中的異常情況。
離群點檢測: 訓練資料包含異常值,我們需要適應訓練資料的中心模式,忽略偏差觀測值。

scikit-learn專案提供了一套可用於新奇和離群點檢測的機器學習工具。 該策略是通過資料從無監督的方式學習的物件來實現的:

estimator.fit(X_train)

然後可以使用 predict

 方法將新觀察值作為內在值或異常值排序:

estimator.predict(X_test)

正常被標記為1,而異常值被標記為-1。

2.11.1. 新奇檢測

從 p 個特徵描述的相同分佈考慮 n 個觀察值的資料集。 現在考慮,我們再新增一個觀察資料集。 新的觀察與其他觀察是不同的,我們可以懷疑它是正常的嗎? (即是否來自相同的分配?)或者相反,是否與另一個相似,我們無法將其與原始觀察結果區分開來? 這是新奇檢測工具和方法所解決的問題。

一般來說,它將要學習一個粗略且緊密的邊界,界定初始觀測分佈的輪廓,繪製在嵌入的 p 維空間中。 那麼,如果進一步的觀察在邊界劃分的子空間內,則它們被認為來自與初始觀察相同的群體。 否則,如果他們在邊界之外,我們可以說他們是異常的,對我們的評估有一定的信心。

One-Class SVM 已經由Schölkopf等人採用。 為此目的並在 支援向量機 模組的 svm.OneClassSVM 物件中實現。 需要選擇kernel和scalar引數來定義邊界。 通常選擇RBF核心,儘管沒有確切的公式或演算法來設定其頻寬引數。 這是scikit-learn實現中的預設值。 \nu 引數,也稱為一級SVM的邊距,對應於在邊界之外找到新的但常規的觀察的概率。

../_images/sphx_glr_plot_oneclass_0011.png

2.11.2. 離群點檢測

離群點檢測類似於新奇檢測,其目的是將正常觀察的核心與一些被稱為“離群點”的汙染物進行分離。 然而,在異常值檢測的情況下,我們沒有一個乾淨的資料集代表可用於訓練任何工具的常規觀察值的群體。

2.11.2.1. 橢圓模型適配

執行異常值檢測的一種常見方式是假設常規資料來自已知分佈(例如,資料是高斯分佈的)。 從這個假設來看,我們通常試圖定義資料的“形狀”,並且可以將離散觀察值定義為足夠遠離擬合形狀的觀測值。

scikit-learn提供了一個物件 covariance.EllipticEnvelope ,它適合於對資料的魯棒協方差估計,從而將橢圓適配到中央資料點,忽略中央模式之外的點。

例如,假設異構資料是高斯分佈的,它將以魯棒的方式(即不受異常值的影響)來估計非線性位置和協方差。 從該估計得到的馬氏距離距離用於得出偏離度量。 這個策略如下圖所示。

../_images/sphx_glr_plot_mahalanobis_distances_0011.png

參考文獻:

  • Rousseeuw, P.J., Van Driessen, K. “A fast algorithm for the minimum covariance determinant estimator” Technometrics 41(3), 212 (1999)

2.11.2.2. Isolation Forest

在高維資料集中執行異常值檢測的一種有效方法是使用隨機森林。
ensemble.IsolationForest 通過隨機選擇特徵然後隨機選擇所選特徵的最大值和最小值之間的分割值來隔離觀察值。

由於遞迴分割槽可以由樹結構表示,因此隔離樣本所需的分裂次數等同於從根節點到終止節點的路徑長度。

在這樣的隨機樹的森林中平均的這個路徑長度是正態性和我們的決策功能的量度。

隨機分割槽產生明顯較短的異常路徑。 因此,當一個隨機樹林共同為特定樣本產生較短的路徑長度時,它們很有可能是異常的。

這個策略如下圖所示。

../_images/sphx_glr_plot_isolation_forest_0011.png

參考文獻:

  • Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua. “Isolation forest.” Data Mining, 2008. ICDM‘08. Eighth IEEE International Conference on.

2.11.2.3. 區域性離群因子(LOF)

對中等高維資料集執行異常值檢測的另一種有效方法是使用區域性離群因子(LOF)演算法。

neighbors.LocalOutlierFactor (LOF)演算法計算反映觀測值異常程度的分數(稱為區域性離群因子)。 它測量給定資料點相對於其鄰居的區域性密度偏差。 這個想法是檢測具有比其鄰居明顯更低密度的樣品。

實際上,從k個最近的鄰居獲得區域性密度。 觀察的LOF得分等於他的k-最近鄰居的平均區域性密度與其本身密度的比值:正常情況預期具有與其鄰居類似的區域性密度,而異常資料 預計本地密度要小得多。

考慮的鄰居數(k個別名引數n_neighbors)通常選擇1)大於叢集必須包含的物件的最小數量,以便其他物件可以是相對於該叢集的本地異常值,並且2)小於最大值 靠近可能是本地異常值的物件的數量。 在實踐中,這樣的資訊通常不可用,並且n_neighbors = 20似乎總體上很好地工作。 當異常值的比例高(即大於10%時,如下面的例子),n鄰居應該更大(在下面的例子中,n_neighbors = 35)。

LOF演算法的優點是考慮到資料集的區域性和全域性屬性:即使在異常樣本具有不同基礎密度的資料集中,它也能夠很好地執行。 問題不在於,樣本是如何孤立的,而是與周邊鄰里有多孤立。

這個策略如下圖所示。

../_images/sphx_glr_plot_lof_0011.png

有興趣的們也可以和我們一起來維護,持續更新中 。。。

機器學習交流群: 629470233