【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. 新奇檢測
從
個特徵描述的相同分佈考慮
個觀察值的資料集。 現在考慮,我們再新增一個觀察資料集。 新的觀察與其他觀察是不同的,我們可以懷疑它是正常的嗎? (即是否來自相同的分配?)或者相反,是否與另一個相似,我們無法將其與原始觀察結果區分開來? 這是新奇檢測工具和方法所解決的問題。
一般來說,它將要學習一個粗略且緊密的邊界,界定初始觀測分佈的輪廓,繪製在嵌入的
維空間中。 那麼,如果進一步的觀察在邊界劃分的子空間內,則它們被認為來自與初始觀察相同的群體。 否則,如果他們在邊界之外,我們可以說他們是異常的,對我們的評估有一定的信心。
One-Class SVM 已經由Schölkopf等人採用。 為此目的並在 支援向量機 模組的 svm.OneClassSVM
物件中實現。 需要選擇kernel和scalar引數來定義邊界。 通常選擇RBF核心,儘管沒有確切的公式或演算法來設定其頻寬引數。 這是scikit-learn實現中的預設值。
引數,也稱為一級SVM的邊距,對應於在邊界之外找到新的但常規的觀察的概率。
參考文獻:
- Estimating the support of a high-dimensional distribution Schölkopf, Bernhard, et al. Neural computation 13.7 (2001): 1443-1471.
例子:
- 參見 One-class SVM with non-linear kernel (RBF) 用於通過
svm.OneClassSVM
物件視覺化圍繞某些資料學習的邊界。
2.11.2. 離群點檢測
離群點檢測類似於新奇檢測,其目的是將正常觀察的核心與一些被稱為“離群點”的汙染物進行分離。 然而,在異常值檢測的情況下,我們沒有一個乾淨的資料集代表可用於訓練任何工具的常規觀察值的群體。
2.11.2.1. 橢圓模型適配
執行異常值檢測的一種常見方式是假設常規資料來自已知分佈(例如,資料是高斯分佈的)。 從這個假設來看,我們通常試圖定義資料的“形狀”,並且可以將離散觀察值定義為足夠遠離擬合形狀的觀測值。
scikit-learn提供了一個物件 covariance.EllipticEnvelope
,它適合於對資料的魯棒協方差估計,從而將橢圓適配到中央資料點,忽略中央模式之外的點。
例如,假設異構資料是高斯分佈的,它將以魯棒的方式(即不受異常值的影響)來估計非線性位置和協方差。 從該估計得到的馬氏距離距離用於得出偏離度量。 這個策略如下圖所示。
例子:
- 參見 Robust covariance estimation and Mahalanobis distances relevance 說明使用標準 (
covariance.EmpiricalCovariance
) 或穩健估計 (covariance.MinCovDet
) 的位置和協方差來評估觀察的偏離程度的差異。
參考文獻:
- 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
通過隨機選擇特徵然後隨機選擇所選特徵的最大值和最小值之間的分割值來隔離觀察值。
由於遞迴分割槽可以由樹結構表示,因此隔離樣本所需的分裂次數等同於從根節點到終止節點的路徑長度。
在這樣的隨機樹的森林中平均的這個路徑長度是正態性和我們的決策功能的量度。
隨機分割槽產生明顯較短的異常路徑。 因此,當一個隨機樹林共同為特定樣本產生較短的路徑長度時,它們很有可能是異常的。
這個策略如下圖所示。
例子:
- 參見 IsolationForest example 說明IsolationForest的用法。
- 參見 Outlier detection with several methods. 將
ensemble.IsolationForest
與neighbors.LocalOutlierFactor
,svm.OneClassSVM
(調整為執行類似異常值檢測方法)和基於協方差的異常值檢測與協方差的covariance.EllipticEnvelope
.
參考文獻:
- 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演算法的優點是考慮到資料集的區域性和全域性屬性:即使在異常樣本具有不同基礎密度的資料集中,它也能夠很好地執行。 問題不在於,樣本是如何孤立的,而是與周邊鄰里有多孤立。
這個策略如下圖所示。
例子:
- 參見 Anomaly detection with Local Outlier Factor (LOF),
neighbors.LocalOutlierFactor
使用說明。 - 參見 Outlier detection with several methods., 與其他異常檢測方法進行比較。
參考文獻:
- Breunig, Kriegel, Ng, and Sander (2000) LOF: identifying density-based local outliers. Proc. ACM SIGMOD
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
的資料在每種情況下表現良好。
對於以和well-centered的非線性模式,svm.OneClassSVM 不能受益於inlier群體的旋轉對稱性。 此外,它適合訓練集中存在的異常值。 相反,基於擬合協方差的covariance.EllipticEnvelope 學習一個橢圓,這適合於inlier分佈。ensemble.IsolationForest 和 neighbors.LocalOutlierFactor 表現也好。 |
|
---|---|
由於inlier分佈變為雙峰,所以covariance.EllipticEnvelope 不適合內部值。 但是,我們可以看到ensemble.IsolationForest,svm.OneClassSVM 和 neighbors.LocalOutlierFactor 在檢測這兩種模式時遇到困難,而且 svm.OneClassSVM往往會過度複雜:因為它沒有 內在模型,它解釋了一些區域,偶爾有一些異常值聚集在一起,作為內在的。 |
|
如果inlier分佈非常高斯,則 svm.OneClassSVMensemble.IsolationForest 和 neighbors.LocalOutlierFactor 一樣 能夠恢復合理的近似, 而 covariance.EllipticEnvelope 完全失敗。 |
例子:
- 參見 Outlier detection with several methods. ,
svm.OneClassSVM
(調整為執行異常檢測方法),ensemble.IsolationForest
,neighbors.LocalOutlierFactor
和基於協方差的異常值檢測協方差的covariance.EllipticEnvelope
.
中文文件: 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
我的部落格即將同步至騰訊雲+社群,邀請大家一同入駐。