资源简介
lof为基于密度的离群点检测算法,该上传代码,能够直观显示每个数据点的离群因子大小,帮助理解该算法。
代码片段和文件信息
%LOF算法
function lof = LOF(dist)
K=10;
m=size(dist1); %m为对象数,dist为两两之间的距离
distance = zeros(mm);
num = zeros(mm); %distance 和num用来记录排序后的顺序,和对象编号顺序
kdistance = zeros(m1); %计算每个对象的kdistance
count = zeros(m1); %k邻域的对象数
reachdist = zeros(mm); %计算两两之间的reachable-distance
lrd = zeros(m1);
lof = zeros(m1);
%计算k-distance
for i=1:m
[distance(i:)num(i:)]=sort(dist(i:)‘ascend‘);
kdistance(i)=distance(iK+1);
count(i) = -1;%自己的距离为0,要去掉自己
for j = 1:m
if dist(ij)<=kdistance(i)
count(i) = count(i)+1;
end
end
end
for i = 1:m
for j=1:i-1
reachdist(ij) = max(dist(ij)kdistance(j));
reachdist(ji) = reachdist(ij);
end
end
for i = 1:m
sum_reachdist=0;
for j=1:count(i)
sum_reachdist=sum_reachdist+reachdist(inum(j+1));
end
%计算每个点的lrd
lrd(i)=count(i)/sum_reachdist;
end
% 得到lof值
for i=1:m
sumlrd=0;
for j=1:count(i)
sumlrd=sumlrd+lrd(num(j+1))/lrd(i);
end
lof(i)=sumlrd/count(i);
end
%画图
% subplot(211)
% plot(1:size(x1)x‘-b.‘‘linewidth‘2‘markersize‘14.5);
% legend(‘原始数据‘);
% title(‘LOF方法效果图‘);
% set(legend‘location‘‘best‘);
% subplot(212)
% plot(1:size(lof2)lof‘-r.‘‘linewidth‘2‘markersize‘14.5);
% legend(‘LOF值‘);
% set(legend‘location‘‘best‘);
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1519 2017-12-28 15:40 LOF.m
文件 455 2017-12-28 15:40 testLOF.m
评论
共有 条评论