許多應(yīng)用程序要有能力判斷新觀測(cè)值是否與現(xiàn)有觀測(cè)值具有相同的分布(它是一個(gè)內(nèi)點(diǎn)(inlier)),或者應(yīng)該被認(rèn)為是不同的(它是一個(gè)離群值)。通常,這種能力被用于清理實(shí)際數(shù)據(jù)集, 必須做出兩種重要區(qū)分:
離群點(diǎn)檢測(cè): | 訓(xùn)練數(shù)據(jù)包含離群點(diǎn),這些離群點(diǎn)被定義為遠(yuǎn)離其它內(nèi)圍點(diǎn)的觀察值。因此,離群點(diǎn)檢測(cè)估計(jì)器會(huì)嘗試擬合出訓(xùn)練數(shù)據(jù)中內(nèi)圍點(diǎn)聚集的區(qū)域, 而忽略異常值觀察。 |
---|---|
奇異值檢測(cè): | 訓(xùn)練數(shù)據(jù)沒(méi)有受到離群點(diǎn)污染,我們感興趣的是檢測(cè)一個(gè)新的觀測(cè)值是否為離群點(diǎn)。在這種情況下,離群點(diǎn)被認(rèn)為是奇異值。 |
離群點(diǎn)檢測(cè)和奇異值檢測(cè)都用于異常檢測(cè), 其中一項(xiàng)感興趣的是檢測(cè)異常或異常觀察。離群點(diǎn)檢測(cè)又被稱(chēng)之為無(wú)監(jiān)督異常檢測(cè),奇異值檢測(cè)又被稱(chēng)之為半監(jiān)督異常檢測(cè)。 在。相反的,在奇異值檢測(cè)的背景下,奇異值/異常點(diǎn)只要位于訓(xùn)練數(shù)據(jù)的低密度區(qū)域,是可以形成稠密聚類(lèi)簇的,在此背景下被認(rèn)為是正常的。
scikit-learn項(xiàng)目提供了一組機(jī)器學(xué)習(xí)工具,可用于新穎性或離群值檢測(cè)。通過(guò)以無(wú)監(jiān)督的方式從數(shù)據(jù)中學(xué)習(xí)對(duì)象來(lái)實(shí)現(xiàn)此策略:
estimator.fit(X_train)
然后可以使用以下predict
方法將新觀察值分類(lèi)為離群點(diǎn)或內(nèi)圍點(diǎn) :
estimator.predict(X_test)
內(nèi)圍點(diǎn)標(biāo)記為1,而離群點(diǎn)標(biāo)記為-1。預(yù)測(cè)方法利用了估計(jì)器計(jì)算的原始評(píng)分函數(shù)的閾值。通過(guò)該score_samples
可以訪問(wèn)此評(píng)分函數(shù),而閾值可以由contamination
參數(shù)控制。
decision_function
還通過(guò)評(píng)分函數(shù)定義該方法,以使負(fù)值是離群點(diǎn),而非負(fù)值不是離群點(diǎn):
estimator.decision_function(X_test)
請(qǐng)注意 neighbors.LocalOutlierFactor 類(lèi)默認(rèn)不支持 predict
, decision_function
和 score_samples
方法,而只支持 fit_predict
方法, 因?yàn)檫@個(gè)估計(jì)器從本來(lái)就是被用到離群點(diǎn)檢測(cè)中去的??梢酝ㄟ^(guò) negative_outlier_factor_
屬性來(lái)獲取訓(xùn)練樣本的異常性得分。
如果您真的想把neighbors.LocalOutlierFactor
用于奇異值檢測(cè),即預(yù)測(cè)新的樣本標(biāo)簽或計(jì)算新的未知數(shù)據(jù)的異常分?jǐn)?shù),則可以在擬合估計(jì)器之前把novelty
參數(shù)設(shè)置為True
。在這種情況下,fit_predict
不可用。
警告 :使用局部離群因子進(jìn)行奇異值檢測(cè)
當(dāng)
novelty
參數(shù)設(shè)置為 True 時(shí),在新的未見(jiàn)過(guò)的數(shù)據(jù)上,你只能使用predict
,decision_function
和score_samples
,而不能用在訓(xùn)練數(shù)據(jù)上, 因?yàn)闀?huì)導(dǎo)致錯(cuò)誤的結(jié)果。訓(xùn)練樣本的異常性得分始終可以通過(guò)negative_outlier_factor_
屬性獲取。
neighbors.LocalOutlierFactor
下表中總結(jié)了離群點(diǎn)檢測(cè)和奇異值檢測(cè)中的行為。
方法 | 離群點(diǎn)檢測(cè) | 新穎性檢測(cè) |
---|---|---|
fit_predict |
可用 | 無(wú)法使用 |
predict |
無(wú)法使用 | 僅用于新數(shù)據(jù) |
decision_function |
無(wú)法使用 | 僅用于新數(shù)據(jù) |
score_samples |
采用 negative_outlier_factor_ |
僅用于新數(shù)據(jù) |
比較scikit-learn中的離群點(diǎn)檢測(cè)算法。局部離群點(diǎn)因子(Local Outlier Factor, LOF)并沒(méi)有顯示黑色的決策邊界,因?yàn)楫?dāng)它用于離群點(diǎn)檢測(cè)時(shí),它沒(méi)有適用于新數(shù)據(jù)的 predict 方法。
ensemble.IsolationForest
和neighbors.LocalOutlierFactor
在此處用到的數(shù)據(jù)集上表現(xiàn)很好。svm.OneClassSVM
被認(rèn)為對(duì)離群點(diǎn)敏感并因此對(duì)離群點(diǎn)檢測(cè)執(zhí)行的不是很好。最后, covariance.EllipticEnvelope
假設(shè)數(shù)據(jù)服從高斯分布并學(xué)習(xí)一個(gè)橢圓。有關(guān)不同估計(jì)器的更多詳細(xì)信息,請(qǐng)參閱示例 玩具數(shù)據(jù)集異常檢測(cè)算法的比較研究以及以下各節(jié)。
示例:
考慮一個(gè)由 個(gè)特征描述的相同分布的 個(gè)觀測(cè)的數(shù)據(jù)集。 現(xiàn)在考慮我們?cè)谶@個(gè)數(shù)據(jù)集中再增加一個(gè)觀測(cè)值。 這個(gè)新觀測(cè)是否與其他的觀測(cè)值有很大差異,我們就可以懷疑它是否是常規(guī)值 (即它否來(lái)自相同的分布?)或者相反,如果新觀測(cè)與原有觀測(cè)非常相似以至于我們就無(wú)法將其與原有觀測(cè)值分開(kāi)? 這是奇異值檢測(cè)工具和方法所解決的問(wèn)題。
一般來(lái)說(shuō),它是要學(xué)習(xí)出一個(gè)粗略的、封閉的邊界劃定出初始觀測(cè)分布的輪廓,繪制在嵌入的 維空間中。然后,如果進(jìn)一步的觀測(cè)值位于這個(gè)邊界劃分的子空間內(nèi),則認(rèn)為它們來(lái)自與初始觀測(cè)值來(lái)自同一處。 否則,如果它們位于邊界之外,我們就可以說(shuō)根據(jù)我們?cè)u(píng)估給定的置信度而言,它們是異常的。
Sch?lkopf 等人已經(jīng)采用One-Class SVM(單類(lèi)支持向量機(jī))來(lái)實(shí)現(xiàn)新奇檢測(cè),并在屬于 支持向量機(jī) 模塊的 svm.OneClassSVM
對(duì)象中實(shí)現(xiàn)。 它需要選擇一個(gè) kernel 和 scalar 參數(shù)來(lái)定義邊界。 雖然沒(méi)有精確的公式或算法來(lái)設(shè)置RBF核的帶寬參數(shù),但通常選擇RBF核。這是scikit-learn實(shí)現(xiàn)中的默認(rèn)設(shè)置。參數(shù) ,也稱(chēng)為單類(lèi)支持向量機(jī)的邊沿,對(duì)應(yīng)于在邊界之外找到新的但常規(guī)的觀測(cè)值的概率。
參考資料:
Estimating the support of a high-dimensional distribution Sch?lkopf, Bernhard, et al. Neural computation 13.7 (2001): 1443-1471. 示例:
參考 一類(lèi)非線性核支持向量機(jī)(RBF) ,通過(guò) svm.OneClassSVM
對(duì)象學(xué)習(xí)一些數(shù)據(jù)來(lái)將邊界可視化。物種分布模型
離群點(diǎn)檢測(cè)與新奇性檢測(cè)類(lèi)似,其目的是將常規(guī)觀測(cè)的核心數(shù)據(jù)與被稱(chēng)為離群點(diǎn)的污染數(shù)據(jù)分離開(kāi)來(lái)。然而,在離群點(diǎn)檢測(cè)的情況下,我們沒(méi)有一個(gè)清晰的數(shù)據(jù)集來(lái)表示常規(guī)觀測(cè)的總體,這些數(shù)據(jù)集可以用來(lái)訓(xùn)練任何工具。
執(zhí)行離群值檢測(cè)的一種常見(jiàn)方法是假設(shè)常規(guī)數(shù)據(jù)來(lái)自一個(gè)已知分布(例如數(shù)據(jù)是高斯分布的)。根據(jù)這一假設(shè),我們一般嘗試定義數(shù)據(jù)的“形狀”,并可以將邊緣觀測(cè)定義為距離擬合形狀足夠遠(yuǎn)的觀測(cè)值。
scikit-learn 提供了 covariance.EllipticEnvelope
對(duì)象,橢圓包絡(luò)線,它對(duì)數(shù)據(jù)進(jìn)行穩(wěn)健的協(xié)方差估計(jì),從而對(duì)中心數(shù)據(jù)點(diǎn)進(jìn)行擬合出一個(gè)橢圓,忽略中心模式之外的點(diǎn)。
例如,假設(shè)內(nèi)部數(shù)據(jù)是高斯分布的,它將以一種可靠的方式(即不受離群值的影響)估算離群位置和協(xié)方差。從這個(gè)估計(jì)值得到的馬氏距離用來(lái)得出離群度的度量。這個(gè)策略如下所示。
示例:
參考 魯棒協(xié)方差估計(jì)與馬氏距離相關(guān)性 說(shuō)明對(duì)位置和協(xié)方差使用標(biāo)準(zhǔn)估計(jì) ( covariance.EmpiricalCovariance
) 或穩(wěn)健估計(jì) (covariance.MinCovDet
) 來(lái)度量觀測(cè)值的偏遠(yuǎn)性差異。參考資料:
Rousseeuw, P.J., Van Driessen, K. “A fast algorithm for the minimum covariance determinant estimator” Technometrics 41(3), 212 (1999)
在高維數(shù)據(jù)集中實(shí)現(xiàn)離群點(diǎn)檢測(cè)的一種有效方法是使用隨機(jī)森林。ensemble.IsolationForest
通過(guò)隨機(jī)選擇一個(gè)特征,然后隨機(jī)選擇一個(gè)被選擇特征的最大值和最小值之間的分割值來(lái)“隔離”觀察結(jié)果。
由于遞歸劃分可以由樹(shù)形結(jié)構(gòu)表示,因此隔離樣本所需的分割次數(shù)等于從根節(jié)點(diǎn)到終止節(jié)點(diǎn)的路徑長(zhǎng)度。
在這樣的隨機(jī)樹(shù)的森林中取平均值就是這條路徑的長(zhǎng)度,是對(duì)數(shù)據(jù)正態(tài)性和我們的決策函數(shù)的一種度量。
隨機(jī)劃分能為異常觀測(cè)產(chǎn)生明顯的更短路徑。 因此,當(dāng)隨機(jī)樹(shù)的森林為特定樣本共同產(chǎn)生較短的路徑長(zhǎng)度時(shí),他們很可能是異常的。
ensemble.IsolationForest的實(shí)現(xiàn),是基于tree.ExtraTreeRegressor全體。按照Isolation Forest原始,每棵樹(shù)的最大深度設(shè)置為,其中n是構(gòu)建樹(shù)所用的樣本數(shù)量(詳見(jiàn):(Liu et al., 2008) )
該算法如下圖所示。
ensemble.IsolationForest
支持warm_start=True
,可以讓你添加更多的樹(shù)到已擬合好的模型中:
>>> from sklearn.ensemble import IsolationForest
>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [0, 0], [-20, 50], [3, 5]])
>>> clf = IsolationForest(n_estimators=10, warm_start=True)
>>> clf.fit(X) # fit 10 trees
>>> clf.set_params(n_estimators=20) # add 10 more trees
>>> clf.fit(X) # fit the added trees
Examples:
有關(guān) IsolationForest 的說(shuō)明,請(qǐng)參考 IsolationForest示例 。 References:
Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua. “Isolation forest.” Data Mining, 2008. ICDM’08. Eighth IEEE International Conference on.
對(duì)中等高維數(shù)據(jù)集(即維數(shù)勉強(qiáng)算是高維)執(zhí)行離群點(diǎn)檢測(cè)的另一種有效方法是使用局部離群因子(LOF)算法。
neighbors.LocalOutlierFactor
LocalOutlierFactor (LOF)算法計(jì)算一個(gè)反映觀測(cè)異常程度的得分(稱(chēng)為局部離群因子)。 它測(cè)量給定數(shù)據(jù)點(diǎn)相對(duì)于相鄰數(shù)據(jù)點(diǎn)的局部密度偏差。這樣做的目的是為了檢測(cè)出那些比近鄰的密度低得多的樣本。
實(shí)際應(yīng)用中,局部密度從 k 個(gè)最近鄰求得的。 觀測(cè)數(shù)據(jù)的 LOF 得分等于其 k 個(gè)最近鄰的平均局部密度與其本身密度的比值:正常數(shù)據(jù)集預(yù)計(jì)與其近鄰有著相似的局部密度,而異常數(shù)據(jù)則預(yù)計(jì)比近鄰的局部密度要小得多。
k個(gè)近鄰數(shù)(別名參數(shù) n_neighbors )通常選擇 1) 大于一個(gè)聚類(lèi)簇必須包含的最小數(shù)量的對(duì)象,所以其它對(duì)象可以成為該聚類(lèi)簇的局部離散點(diǎn),并且 ,2) 小于可能成為聚類(lèi)簇對(duì)象的最大數(shù)量, 減少這K個(gè)近鄰成為離群點(diǎn)的可能性。在實(shí)踐中,這樣的信息通常不可用,并且使 n_neighbors = 20 似乎都能使算法有很好的表現(xiàn)。 當(dāng)離群點(diǎn)的比例較高時(shí)(大于 10% 時(shí),如下面的示例),n_neighbors 應(yīng)該較大(在下面的示例中,n_neighbors = 35)。
LOF 算法的優(yōu)點(diǎn)是考慮到數(shù)據(jù)集的局部和全局屬性:即使在具有不同潛在密度的離群點(diǎn)數(shù)據(jù)集中,它也能夠表現(xiàn)得很好。 問(wèn)題不在于樣本是如何被分離的,而是樣本與周?chē)彽姆蛛x程度有多大。
在使用 LOF 進(jìn)行離群點(diǎn)檢測(cè)時(shí),不能使用 predict, decisionfunction 和 score_samples 方法, 只能用 fit_predict 方法。訓(xùn)練樣本的異常性得分可通過(guò) negative_outlier_factor 屬性來(lái)獲得。 注意當(dāng)使用LOF算法進(jìn)行奇異值檢測(cè)的時(shí)候(novelty 設(shè)為 True), predict, decision_function 和 score_samples 函數(shù)可被用于新的未知數(shù)據(jù)。請(qǐng)查看具有局部離群因子(LOF)的新穎性檢測(cè).
該策略如下所示。
示例:
neighbors.LocalOutlierFactor
的使用說(shuō)明請(qǐng)參考 使用局部離群因子(LOF)進(jìn)行離群檢測(cè) 。
參考資料:
Breunig, Kriegel, Ng, and Sander (2000) LOF: identifying density-based local outliers. Proc. ACM SIGMOD
為了使用 neighbors.LocalOutlierFactor 進(jìn)行奇異值檢測(cè), 即對(duì)新的未見(jiàn)過(guò)的樣本預(yù)測(cè)其標(biāo)簽或計(jì)算異常性得分,在擬合之前,你必須在實(shí)例化估計(jì)器時(shí), 將novelty
參數(shù)設(shè)為 True:
lof = LocalOutlierFactor(novelty=True)
lof.fit(X_train)Copy
請(qǐng)注意此情況下fit_predict
不再適用。
警告 :使用局部離群因子(Local Outlier Factor,LOF)進(jìn)行奇異值檢測(cè)
要注意,在新的未見(jiàn)過(guò)的數(shù)據(jù)上,當(dāng)
novelty
參數(shù)被設(shè)為 True 時(shí)只能使用predict
,decision_function
和score_samples
,不能把這幾個(gè)函數(shù)用在訓(xùn)練數(shù)據(jù)上, 否則會(huì)導(dǎo)致錯(cuò)誤的結(jié)果。訓(xùn)練樣本的異常性得分可以通過(guò)negative_outlier_factor_
屬性來(lái)訪問(wèn)獲取。
使用局部離群因子進(jìn)行奇異值檢測(cè)的示例見(jiàn)下圖:
更多建議: