基于欧氏距离和马氏距离的异常点检测—matlab实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前⼏天接的⼀个⼩项⽬,基于欧⽒距离和马⽒距离的异常点检测,已经交接完毕,现在把代码公开。
基于欧式距离的:
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]
基于欧⽒距离和马⽒距离的异常点检测—M a t l a b 实现
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。