基於歐氏距離和馬氏距離的異常點檢測—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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM