Kaggle知識點:Sklearn異常檢測方法

離群檢測 與 新奇檢測

很多應用場景都需要能夠確定樣本是否屬於(yu) 與(yu) 現有的分布,或者應該被視為(wei) 不同的分布。

  • 離群檢測(Outlier detection):訓練數據包含離群值,這些離群值被定義為與其他觀察值相差甚遠的觀察值。
  • 新奇檢測 (Novelty detection):訓練數據沒有離群點,需要觀察新的樣本是否包含離群點。

離群檢測和新穎性檢測都用於(yu) 異常檢測,其中人們(men) 對檢測異常或不尋常的觀察感興(xing) 趣。離群檢測也稱為(wei) 無監督異常檢測,新奇檢測稱為(wei) 半監督異常檢測。

在離群檢測中離群值不能形成密集的集群,因為(wei) 可以假設離群值位於(yu) 低密度區域。相反在新穎性檢測中,新穎性處於(yu) 訓練數據的低密度區域。

Sklearn中支持的方法

如下圖為(wei) scikit-learn 中異常值檢測算法的比較,IsolationForest和LocalOutlierFactor在此處考慮的數據集上表現相當不錯。而OneClassSVM對離群值很敏感,因此在離群值檢測方麵表現不佳。

但OneClassSVM仍可用於(yu) 異常值檢測,但需要微調其超參數nu以處理異常值並防止過度擬合。SGDOneClassSVM提供了複雜度更低的實現。而EllipticEnvelope假設數據是高斯分布的並學習(xi) 一個(ge) 橢圓。

  • ensemble.IsolationForest
  • neighbors.LocalOutlierFactor
  • svm.OneClassSVM
  • linear_model.SGDOneClassSVM
  • covariance.EllipticEnvelope

孤立森林 IsolationForest

孤立森林(Isolation Forest)是一種異常值檢測算法。它通過建立多棵決(jue) 策樹,並在每棵樹中隨機選取一個(ge) 特征將數據集劃分為(wei) 兩(liang) 個(ge) 子集來實現異常值檢測。與(yu) 其他決(jue) 策樹算法不同的是,孤立森林算法並不是用來預測目標變量的值的,而是用來預測數據點是否是異常值。

為(wei) 了計算出每個(ge) 數據點是否是異常值,孤立森林算法對每個(ge) 數據點計算出一個(ge) 分數,稱為(wei) 異常分數。數據點的異常分數越低,說明它越可能是一個(ge) 異常值。通常情況下,我們(men) 可以設定一個(ge) 閾值,如果數據點的異常分數低於(yu) 這個(ge) 閾值,就認為(wei) 這是一個(ge) 異常值。

關(guan) 鍵參數:

  • n_estimators:學習器個數
  • max_samples:采樣最大樣本個數
  • max_features:采樣最大特征個數

from sklearn.ensemble import IsolationForest X = [[-1.1], [0.3], [0.5], [100]] clf = IsolationForest(random_state=0).fit(X) # 預測特定樣本是否為(wei) 異常值 # 對於(yu) 每個(ge) 觀察值,返回 (+1 或 -1) 分別代表正常樣本和異常值 clf.predict([[0.1], [0], [90]])

Local Outlier Factor

Local Outlier Factor (LOF) 是一種用於(yu) 檢測數據集中異常或異常數據點的算法。LOF 背後的基本思想是測量給定數據點與(yu) 其相鄰數據點的局部偏差。如果一個(ge) 點與(yu) 其相鄰點有顯著差異,則將其視為(wei) 異常值。一個(ge) 點被視為(wei) 離群值的程度通過稱為(wei) 局部離群值因子的度量來量化。

首先確定該點鄰居的密度,密度計算方法是將給定距離內(nei) 的鄰居數除以具有該距離的球體(ti) 的體(ti) 積。較高鄰居密度的點被認為(wei) 比具有較低鄰居密度的點更不離群。然後將一個(ge) 點的 LOF 計算為(wei) 該點與(yu) 其相鄰點的密度之比。具有高 LOF 值的點被認為(wei) 是異常值。

關(guan) 鍵參數:

  • n_neighbors:最近鄰樣本個數
  • 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是一種用於(yu) 檢測異常點的算法,是一種無監督學習(xi) 算法。決(jue) 策邊界將數據點分為(wei) 兩(liang) 類:內(nei) 點和外點。離群點是與(yu) 訓練集中的大多數點相似的點,而離群點是與(yu) 訓練集中的大多數點顯著不同的點。

為(wei) 了學習(xi) 決(jue) 策邊界,OneClassSVM最大化邊界和內(nei) 點之間的距離,最終找到合適的超平麵。這個(ge) 超平麵可以最大化內(nei) 點和決(jue) 策邊界之間的邊距。一旦學習(xi) 了決(jue) 策邊界,就可以使用它來將新點分類為(wei) 內(nei) 點或異常點。

關(guan) 鍵參數:

  • kernel:SVM內核類型
  • nu:訓練誤差分數的上限

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

橢圓包絡(Elliptic Envelope)是一種檢測數據集中異常或異常數據點的方法。它是一種無監督學習(xi) 方法,通過將橢圓擬合到訓練集中的數據點來工作,但假設大多數點遵循高斯分布。

為(wei) 了擬合橢圓,橢圓包絡估計數據點的均值和協方差,並使用這些估計值來確定橢圓的形狀和方向。一旦學習(xi) 了橢圓,它就可以用來將新點分類為(wei) 內(nei) 點或異常點。

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=[00],                                                  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([[00],              [33]])

【競賽報名/項目谘詢+微信:mollywei007】

上一篇

2023年聖路易斯華盛頓大學夏校開始報名

下一篇

LBW是什麽?2023年賓大沃頓LBW夏校申請攻略

你也可能喜歡

  • 暫無相關文章!

評論已經被關(guan) 閉。

插入圖片
返回頂部