【matlab 異常點檢測】基於歐氏距離和馬氏距離的異常點檢測
阿新 • • 發佈:2019-01-08
基於歐式距離的異常點檢測:
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