1. 程式人生 > >【matlab 異常點檢測】基於歐氏距離和馬氏距離的異常點檢測

【matlab 異常點檢測】基於歐氏距離和馬氏距離的異常點檢測

基於歐式距離的異常點檢測:

load data1.txt %匯入資料,行為樣本,列為特徵

X=data1; %賦值給X

u=mean(X); %求均值

[m,n]=size(X);

for i=1:m

dist(i)=sqrt(sum(X(i,:)-u).^2);

end

[a,b]=sort(dist);%對歐氏距離進行排序

T=ceil(m*0.02)%設定閥值



Threshold=a(m-T);%定為閥值

len=length(a);

for i = 1:len %遍歷,如果小於閥值為正常點

if a(i) < Threshold

inlier(i) = [b(i)]
; s=b(i); disp(['正常點序列號:',num2str(s)]) end end % inlier for i = 1:len %遍歷,如果大於等於閥值為正常點 if a(i)>= Threshold outlier(i) = [b(i)]; ns=b(i) disp(['離群點序列號:',num2str(ns)]) end end % outlier

基於馬氏距離的異常點檢測:

load data1.txt %匯入資料,行為樣本,列為特徵

X=data1; %賦值給X

u=mean(X); %求均值

[m,n]=size(X);

for
i=1:m newdata=[X(i,:);u] cov_w=cov(newdata);%求協方差矩陣 dist(i)=(X(i,:)-u)*cov_w*(X(i,:)-u)'%求出每個樣本到u的馬氏距離 end [a,b]=sort(dist);%對馬氏距離進行排序 T=ceil(m*0.02)%設定閥值 Threshold=a(m-T);%定為閥值 clear T; len=length(a); for i = 1:len %遍歷,如果小於閥值,為正常點 if a(i) < Threshold inlier(i) = [b(i)]; s=b(i); disp(['正常點序列號:',num2str(s)])
end end % inlier for i = 1:len %遍歷,如果大於等於閥值為異常點 if a(i)>= Threshold outlier(i) = [b(i)]; l=b(i) disp(['離群點序列號:',num2str(l)]) end end % outlier