機器學習 異常檢測演算法

2021-09-19 18:28:31 字數 2658 閱讀 1773

異常檢測應用在工業檢測、賬戶行為監測等領域。

問題特點:

異常檢測問題,往往更多使用無監督的演算法建模,再結合標定的驗證集用於切閾值。

異常檢測的兩類常用方法:

本文案例**:

資料集:電腦開機引數,包含兩個特徵

訓練集和驗證集的圖示如:

演算法教程參見吳恩達-機器學習-異常檢測。

基本的假定是:資料中的每個特徵數值都符合正態分佈,如果資料點在整體分布上的概率密度值極小,即極小概率出現,認為是異常值。

概率分布方法對資料的要求:

正態性檢驗方法:stats.shapiro

從訓練集假設檢驗的結果並不完全滿足正態分佈。

from scipy import stats # 用於資料的正態性檢驗

print('norm test of x[:,0]: ', stats.shapiro(x[:,0]))

print('norm test of x[:,1]: ', stats.shapiro(x[:,1]))

# output

norm test of x[:,0]: (0.818209171295166, 2.788045548629635e-18)

norm test of x[:,1]: (0.7949155569076538, 2.2437695460625395e-19)

訓練資料無label,在labeled驗證集上,應用演算法:

p_val = multivariate_gaussian(x_val, mu, sigma2) #根據訓練集的mu sigma2 得到驗證集樣本的概率

epsilon_0, f1_0 = select_threshold(y_val, p_val) # 搜尋選擇合適的概率閾值

資料集中的9個異常點,檢測出了7個,另外2個未檢出的點實際在資料集的中心位置,並不是典型的異常點。需要注意的是,僅當資料為2維時,才能方便的應用視覺化方法。

周志華及其學生在2023年提出。

方法:對樣本的所有特徵2分叉,隨機取樣構建n棵tree

假設:異常點非常稀有,一般很快會分配到葉子節點,路徑短

結果:對樣本在tree中分配路徑長度歸一化,給出異常指數

以路徑長度作為異常的度量,在sklearn中已經有成熟實現,模型簡單,速度快,引數少。

輸入資料的特徵選擇比較重要,少量關鍵的特徵效果好。

由於演算法已經在sklearn中實現,可以直接載入使用.isolationforest 支援平行計算,在資料集較大的時候很有優勢。

from sklearn.ensemble import isolationforest

# 需要調的引數主要是 樹的棵樹

isf = isolationforest(n_estimators=10,

n_jobs=-1, # 使用全部cpu

verbose=2,

)isf.fit(x) # 直接用無標籤資料訓練

# 通過decision_function獲取異常系數值,可以理解為異常概率,選擇乙個最好的閾值

由於資料集比較簡單,isolationforest檢測效能與概率分布法是一致的。

由於isolationforest對資料的格式(連續、離散)以及概率分布沒有要求,可以預見這種演算法的應用範圍可能更廣。

機器學習之異常檢測演算法

下面來說下解釋下tp,fp,tn和fn tp true positive 真正例,即將乙個實際為正例的樣本正確的判斷為正例 fp false positive 假正例,即將乙個實際為負例的樣本錯誤的判斷為正例 tn true negtive 真負例,即將乙個實際為負例的樣本正確的判斷為負例 fn f...

異常檢測演算法 Isolation Forest

iforest isolation forest 是由liu et al.1 提出來的基於二叉樹的ensemble異常檢測演算法,具有效果好 訓練快 線性複雜度 等特點。iforest為聚類演算法,不需要標記資料訓練。首先給出幾個定義 iforest的基本思想非常簡單 完成異常點的isolation...

異常點檢測演算法

異常點檢測演算法 對於train data 中的資料,對其中重要的特徵 或者每個特徵 x1,x2,xn,計算其高斯分布 對new data,計算 x 每個特徵 在訓練資料分布下的 p 值並相乘,若p x 小於某個臨界值,則判斷其為異常點 什麼時候選擇使用 p x 根據分布概率來判斷異常點,什麼時候使...