scikit-learn 中文文檔-新異類和異常值檢測-無監督學習|ApacheCN

中文文檔: http://sklearn.apachecn.org/cn/stable/modules/outlier_detection.html

英文文檔: http://sklearn.apachecn.org/en/stable/modules/outlier_detection.html

官方文檔: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)

貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者

關於我們: http://www.apachecn.org/organization/209.html




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

例子:

參考文獻:

2.11.2.4. One-class SVM 與 Elliptic Envelope 與 Isolation Forest 與 LOF

嚴格來說,One-class SVM 不是異常檢測方法,而是一種新穎性檢測方法:其訓練集不應該被異常值污染,因爲它可能適合它們。 也就是說,高維度的異常值檢測或對內容數據的分佈沒有任何假設是非常具有挑戰性的, One-class SVM 在這些情況下給出了有用的結果。

下面的例子說明了當數據越來越少的單峯時, covariance.EllipticEnvelope 如何降低。 svm.OneClassSVM 在具有多種模式和 ensemble.IsolationForest 和 neighbors.LocalOutlierFactor 的數據在每種情況下表現良好。

Comparing One-class SVM, Isolation Forest, LOF, and Elliptic Envelope
對於以和well-centered的非線性模式,svm.OneClassSVM 不能受益於inlier羣體的旋轉對稱性。 此外,它適合訓練集中存在的異常值。 相反,基於擬合協方差的covariance.EllipticEnvelope 學習一個橢圓,這適合於inlier分佈。ensemble.IsolationForest 和 neighbors.LocalOutlierFactor 表現也好。 outlier1
由於inlier分佈變爲雙峯,所以covariance.EllipticEnvelope 不適合內部值。 但是,我們可以看到ensemble.IsolationForest,svm.OneClassSVM 和 neighbors.LocalOutlierFactor 在檢測這兩種模式時遇到困難,而且 svm.OneClassSVM往往會過度複雜:因爲它沒有 內在模型,它解釋了一些區域,偶爾有一些異常值聚集在一起,作爲內在的。 outlier2
如果inlier分佈非常高斯,則 svm.OneClassSVMensemble.IsolationForest 和 neighbors.LocalOutlierFactor 一樣 能夠恢復合理的近似, 而 covariance.EllipticEnvelope 完全失敗。 outlier3

例子:




中文文檔: http://sklearn.apachecn.org/cn/stable/modules/outlier_detection.html

英文文檔: http://sklearn.apachecn.org/en/stable/modules/outlier_detection.html

官方文檔: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)

貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者

關於我們: http://www.apachecn.org/organization/209.html

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

機器學習交流羣: 629470233


發佈了1 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章