Python+Sklearn實現(xiàn)異常檢測
離群檢測 與 新奇檢測
很多應(yīng)用場景都需要能夠確定樣本是否屬于與現(xiàn)有的分布,或者應(yīng)該被視為不同的分布。
- 離群檢測(Outlier detection):訓(xùn)練數(shù)據(jù)包含離群值,這些離群值被定義為與其他觀察值相差甚遠的觀察值。
- 新奇檢測 (Novelty detection):訓(xùn)練數(shù)據(jù)沒有離群點,需要觀察新的樣本是否包含離群點。
離群檢測和新穎性檢測都用于異常檢測,其中人們對檢測異?;虿粚こ5挠^察感興趣。離群檢測也稱為無監(jiān)督異常檢測,新奇檢測稱為半監(jiān)督異常檢測。
在離群檢測中離群值不能形成密集的集群,因為可以假設(shè)離群值位于低密度區(qū)域。相反在新穎性檢測中,新穎性處于訓(xùn)練數(shù)據(jù)的低密度區(qū)域。
Sklearn 中支持的方法
如下圖為scikit-learn 中異常值檢測算法的比較,IsolationForest和LocalOutlierFactor在此處考慮的數(shù)據(jù)集上表現(xiàn)相當(dāng)不錯。而OneClassSVM對離群值很敏感,因此在離群值檢測方面表現(xiàn)不佳。
但OneClassSVM仍可用于異常值檢測,但需要微調(diào)其超參數(shù)nu以處理異常值并防止過度擬合。SGDOneClassSVM提供了復(fù)雜度更低的實現(xiàn)。而EllipticEnvelope假設(shè)數(shù)據(jù)是高斯分布的并學(xué)習(xí)一個橢圓。
- ensemble.IsolationForest
- neighbors.LocalOutlierFactor
- svm.OneClassSVM
- linear_model.SGDOneClassSVM
- covariance.EllipticEnvelope
孤立森林 IsolationForest
孤立森林(Isolation Forest)是一種異常值檢測算法。它通過建立多棵決策樹,并在每棵樹中隨機選取一個特征將數(shù)據(jù)集劃分為兩個子集來實現(xiàn)異常值檢測。與其他決策樹算法不同的是,孤立森林算法并不是用來預(yù)測目標(biāo)變量的值的,而是用來預(yù)測數(shù)據(jù)點是否是異常值。
為了計算出每個數(shù)據(jù)點是否是異常值,孤立森林算法對每個數(shù)據(jù)點計算出一個分?jǐn)?shù),稱為異常分?jǐn)?shù)。數(shù)據(jù)點的異常分?jǐn)?shù)越低,說明它越可能是一個異常值。通常情況下,我們可以設(shè)定一個閾值,如果數(shù)據(jù)點的異常分?jǐn)?shù)低于這個閾值,就認為這是一個異常值。
關(guān)鍵參數(shù):
- n_estimators:學(xué)習(xí)器個數(shù)
- max_samples:采樣最大樣本個數(shù)
- max_features:采樣最大特征個數(shù)
from sklearn.ensemble import IsolationForest X = [[-1.1], [0.3], [0.5], [100]] clf = IsolationForest(random_state=0).fit(X) # 預(yù)測特定樣本是否為異常值 # 對于每個觀察值,返回 (+1 或 -1) 分別代表正常樣本和異常值 clf.predict([[0.1], [0], [90]])
Local Outlier Factor
Local Outlier Factor (LOF) 是一種用于檢測數(shù)據(jù)集中異?;虍惓?shù)據(jù)點的算法。LOF 背后的基本思想是測量給定數(shù)據(jù)點與其相鄰數(shù)據(jù)點的局部偏差。如果一個點與其相鄰點有顯著差異,則將其視為異常值。一個點被視為離群值的程度通過稱為局部離群值因子的度量來量化。
首先確定該點鄰居的密度,密度計算方法是將給定距離內(nèi)的鄰居數(shù)除以具有該距離的球體的體積。較高鄰居密度的點被認為比具有較低鄰居密度的點更不離群。然后將一個點的 LOF 計算為該點與其相鄰點的密度之比。具有高 LOF 值的點被認為是異常值。
關(guān)鍵參數(shù):
- n_neighbors:最近鄰樣本個數(shù)
- metric:距離計算方法
import numpy as np from sklearn.neighbors import LocalOutlierFactor X = [[-1.1], [0.2], [101.1], [0.3]] clf = LocalOutlierFactor(n_neighbors=2) # 異常/離群值返回 -1,離群值返回 +1 clf.fit_predict(X)
OneClassSVM
OneClassSVM是一種用于檢測異常點的算法,是一種無監(jiān)督學(xué)習(xí)算法。決策邊界將數(shù)據(jù)點分為兩類:內(nèi)點和外點。非離群點是與訓(xùn)練集中的大多數(shù)點相似的點,而離群點是與訓(xùn)練集中的大多數(shù)點顯著不同的點。
為了學(xué)習(xí)決策邊界,OneClassSVM最大化邊界和內(nèi)點之間的距離,最終找到合適的超平面。這個超平面可以最大化內(nèi)點和決策邊界之間的邊距。一旦學(xué)習(xí)了決策邊界,就可以使用它來將新點分類為內(nèi)點或異常點。
關(guān)鍵參數(shù):
- kernel:SVM內(nèi)核類型
- nu:訓(xùn)練誤差分?jǐn)?shù)的上限
from sklearn.svm import OneClassSVM X = [[0], [0.44], [0.45], [0.46], [1]] clf = OneClassSVM(gamma='auto').fit(X) # 異常/離群值返回 -1,離群值返回 +1 clf.predict(X)
在實際使用中OneClassSVM速度較慢,因此可以考慮使用隨機梯度下降求解線性的SVM來代替,也就是SGDOneClassSVM。
Elliptic Envelope
橢圓包絡(luò)(Elliptic Envelope)是一種檢測數(shù)據(jù)集中異?;虍惓?shù)據(jù)點的方法。它是一種無監(jiān)督學(xué)習(xí)方法,通過將橢圓擬合到訓(xùn)練集中的數(shù)據(jù)點來工作,但假設(shè)大多數(shù)點遵循高斯分布。
為了擬合橢圓,橢圓包絡(luò)估計數(shù)據(jù)點的均值和協(xié)方差,并使用這些估計值來確定橢圓的形狀和方向。一旦學(xué)習(xí)了橢圓,它就可以用來將新點分類為內(nèi)點或異常點。
import numpy as np from sklearn.covariance import EllipticEnvelope true_cov = np.array([[.8, .3], [.3, .4]]) X = np.random.RandomState(0).multivariate_normal(mean=[0, 0], cov=true_cov, size=500) cov = EllipticEnvelope(random_state=0).fit(X) # predict returns 1 for an inlier and -1 for an outlier cov.predict([[0, 0], [3, 3]])
到此這篇關(guān)于Python+Sklearn實現(xiàn)異常檢測的文章就介紹到這了,更多相關(guān)Python Sklearn異常檢測內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python利用pdfplumber提取PDF文檔中的表格數(shù)據(jù)并導(dǎo)出
pdfplumber是一個功能強大的Python庫,可以用于解析PDF文檔并提取其中的文本、表格和圖像等內(nèi)容,下面我們就來學(xué)習(xí)一下如何使用pdfplumber提取PDF表格數(shù)據(jù)吧2023-12-12使用虛擬環(huán)境打包python為exe 文件的方法
這篇文章主要介紹了關(guān)于使用虛擬環(huán)境打包python為exe 文件的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08python+selenium自動化實戰(zhàn)攜帶cookies模擬登陸微博
這篇文章主要介紹了python+selenium自動化實戰(zhàn)攜帶cookies模擬登陸微博,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python實現(xiàn)bilibili動畫下載視頻批量改名功能
這篇文章主要介紹了python實現(xiàn)bilibili動畫下載視頻批量改名,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-11-11TensorFlow繪制loss/accuracy曲線的實例
今天小編就為大家分享一篇TensorFlow繪制loss/accuracy曲線的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01