資料科學導論 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 陣列邊緣上的細胞不檢測。現在的任務是,給定乙個儲存...
異常檢測方法
異常檢測可謂是乙個博大精深的研究方向,在故障檢測 欺詐檢測 入侵檢測領域有著廣泛應用。本文只是結合各網路資源對其基礎進行簡單介紹,涉及到具體的領域和實際應用,還需進行深入研究和嘗試。正常狀態不能明確定義 在某些領域正常和異常並沒有明確的界限 資料本身存在雜訊,雜訊和異常難以區分 正常行為並不是一成不...