基于欧氏距离和马氏距离的异常点检测—matlab实现
2017-03-29 20:34
344 查看
前几天接的一个小项目,基于欧氏距离和马氏距离的异常点检测,已经交接完毕,现在把代码公开。
基于欧式距离的:
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
基于欧式距离的:
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 异常点检测】基于欧氏距离和马氏距离的异常点检测
- 基于MATLAB的adaboost级联形式的人脸检测实现
- 基于时间序列的异常检测系统的实现思路之一
- 基于Hough 变换的直线检测(Matlab实现)
- 基于时间序列的异常检测C++实现
- 基于肤色和眼睛定位的人脸检测算法——MATLAB实现【转】
- 基于HSV色彩空间变换的阴影检测算法——MATLAB实现
- 基于MATLAB的adaboost级联形式的人脸检测实现
- 基于MATLAB边缘检测算子的实现
- 基于Spark技术实现大规模时间序列异常检测成功落地
- 基于MATLAB的Sobel边缘检测算法实现
- matlab如何实现检测参数异常后停止整个程序的机制
- 基于肤色和眼睛定位的人脸检测算法——MATLAB实现
- 基于PCA的人脸检测(Matlab版代码)
- PCA检测人脸的简单示例_matlab实现
- 图像处理常用算法GPU实现二:基于微分的边缘检测
- 基于Opencv的目标检测与跟踪阴影去除算法实现
- IEEE802.11a及基于IEEE 802.11a的OFDM帧检测算法研究与FPGA实现
- 图像去模糊算法在CUDA上的实现,基于MATLAB平台
- 毕业设计——人脸检测——002 MATLAB实现提取一张图片像素点的RGB值