異常檢測實戰

2021-09-27 08:37:00 字數 3434 閱讀 3126

資料科學導論 python語言實現

一、單變數異常檢測(一次觀測乙個變數)

1.1 z-scores 得分絕對值超過3的

1.2 箱線圖

import numpy as np

from sklearn import preprocessing

normailized_data = preprocessing.standardscaler().fit_transform(boston.data[:,continuous_variables])

outlier_rows,outlier_columns = np.where(np.abs(normalized_data)>3)

單變數方法不能檢測哪些不是極端值的異常值,然而,如果它發現兩個或多個變數的組合出現不正常的值,所涉及的不是極端值的概率會大,因此多變數檢測應運而生

二、多變數異常檢測(同時考慮多個變數) 

2.1 covariance.ellipticenvelope類:

假設全部資料可以表示成基本的多元高斯分布,.ellipticenvelope是乙個試圖找出資料總體分布關鍵引數的函式。檢查每個觀測量與總均值的距離,總均值要考慮資料集中的所有變數,因此演算法能同時發現單變數和多變數的異常值

from sklearn.covariance import ellipticenvelope

robust_covariance_est = ellipticenvelope(contamination=0.05,store_precision=false,assume_centered = false)

robust_covariance_est.fit(data)

detection = robust_covariance_est.predict(data)

outliers = np.where(detection == -1)

regular = np.where(detection == 1)

缺點:當資料有多個分布時,演算法檢視將資料適應乙個總體分布,傾向於尋找最偏遠聚類中的潛在異常值,而忽略了資料中其他可能受異常值影響的區域

注意:資料要標準化再使用更好一點 

2.2svm.oneclasssvm類:

預設引數:kernel=rbf,degree=3,gamma,nu:決定模型是否符合乙個精確分布,還是應該保持某種標準分布而不太注重適應現有的資料(如果有異常值存在,選擇後者)

from sklearn.decomposition import pca

from sklearn import proprecessing

from sklearn import svm

# 標準化

continuous_variable = [n for n in range(boston.data.shape[1]) if n !=3]

normalized_data = preprocessing.standardscalar().fit_transform(boston.data[:,continuous_variables])

# pca

pca = pca(n_components = 5)

zscore_components = pca.fit_transform(normalized_data)

vtot = 'pca variance expained' + str(round(np.sum(pca.explained_variance_ration_),3))

# oneclasssvm

outliers_fraction = 0.02

nu_estimate = 0.95*outliers_fraction + 0.05

machine_learning=svm.oneclasssvm(kernel='rbf',gamma=1/len(normalized_data),degree=3,nu=nu_estimate)

machine_learning.fit(normalized_data)

detection = machine_learning.predict(normalized_data)

outliers = np.where(detection==-1)

regular = np.where(detection==1)

# 視覺化

from matplotlib import pyplot as plt

for r in range(1,5):

in_points = plt.scatter(zscore_components[regular,0],zscore_components[regular,r],c='blue',alpha=0.8,s=60,marker='o',edgecolor='white')

out_points = plt.scatter(zscore_components[outliers,0],zscore_components[outliers,r],c='red',alpha=0.8,s=60,marker='o',edgecolor='white')

plt.legend((in_points,out_points),('inliers','outliers'),scatterpoints=1,loc='best')

plt.xlabel('component 1 ( '+str(round(pca.explained_variance_ratio_[0],3))+')')

plt.ylabel('component'+str(r+1)+'('+str(round(pca.explained_variance_ratio_[r],3))+')')

plt.xlim([-7,7])

plt.ylim([-6,6])

plt.title(vtot)

plt.show()

當然,除了pca還有randomizedpca,factoranalysis更適合大資料集合

kernelpca將訊號對映到非線性空間

3.dbscan

from sklearn.cluster import dbscan

dbs_2 = dbscan(eps=0.5)

labels_2 = dbs_2.fit(dataset_2).labels_

np.unique(labels_2)

#如果結果裡出現-1,就是異常點所在的類

異常細胞檢測

描述 拍攝的一張 ct 用乙個二維陣列來儲存,假設陣列中的每個點代表乙個細胞。每個細胞的顏色用0到 255之間 包括0和 255 的乙個整數表示。定義乙個細胞是異常細胞,如果這個細胞的顏色值比它上下左右 4個細胞的顏色值都小 50以上 包括 50 陣列邊緣上的細胞不檢測。現在的任務是,給定乙個儲存 ...

檢測異常細胞

陣列 第9題 描述 拍攝的一張ct 用乙個二維陣列來儲存,假設陣列中的每個點代表乙個細胞。每個細胞的顏色用0到255之間 包括0和255 的乙個整數表示。定義乙個細胞是異常細胞,如果這個細胞的顏色值比它上下左右4個細胞的顏色值都小50以上 包括50 陣列邊緣上的細胞不檢測。現在的任務是,給定乙個儲存...

異常檢測方法

異常檢測可謂是乙個博大精深的研究方向,在故障檢測 欺詐檢測 入侵檢測領域有著廣泛應用。本文只是結合各網路資源對其基礎進行簡單介紹,涉及到具體的領域和實際應用,還需進行深入研究和嘗試。正常狀態不能明確定義 在某些領域正常和異常並沒有明確的界限 資料本身存在雜訊,雜訊和異常難以區分 正常行為並不是一成不...