基于欧氏距离和马氏距离的异常点检测—matlab实现

Posted 小花花108

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于欧氏距离和马氏距离的异常点检测—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

以上是关于基于欧氏距离和马氏距离的异常点检测—matlab实现的主要内容,如果未能解决你的问题,请参考以下文章

各种距离 欧式距离曼哈顿距离切比雪夫距离闵可夫斯基距离标准欧氏距离马氏距离余弦距离汉明距离杰拉德距离相关距离信息熵

欧氏距离判别法,马氏距离判别法和Fisher判别法的优缺点都有哪些

metric learning -- 马氏距离与欧氏距离

欧式距离标准化欧式距离马氏距离余弦距离

Matlab求两个向量之间的各种距离

R语言机器学习 | 5 距离判别法