基于距离的离群点检测

本算法参照《数据挖掘概念与技术》第三版,算法中有需要人工设定的参数:r距离阈值和f分数阈值。距离阈值以目标对象为圆心,半径为r的范围;分数阈值f的范围(0,1),从伪代码中可以看到,它的本质还是计数统计。因此,基于距离的离群点检测其实是基于密度的聚类算法DBSCAN的简化版。其实现伪代码如下(原书截图):

以下为算法的Matlab实现程序:

clc;
clear;
%读取数据文件,生成点矩阵
fileID = fopen('D:\matlabFile\Outlier Detect\DBO.txt');
DS=textscan(fileID,'%f %f');
fclose(fileID);
%将cell类型转换为矩阵类型,这里只假设原数据为二维属性,且是二维的坐标点
D=cat(2,DS{1},DS{2});
%获得数据矩阵的行数
Row=size(D,1);
%设定距离门限
r=3;
%设定分数(fraction)门限,范围 0<f<1
f=0.5;
%离群点保存
Outlier=[];
for i=1:Row
    count=0;
    for j=1:Row
        if i==j
            continue;
        end
        %计算两点之间的距离
        dist=sqrt((D(i,1)-D(j,1))^2+(D(i,2)-D(j,2))^2);
        %如果小于距离门限,计数器加一
        if dist<=r
            count=count+1;
        end
    end
    %如果小于分数门限,则为离群点
    if count<f*Row
       Outlier(size(Outlier,1)+1,:)=D(i,:); 
    end
end
%显示数据点及离群点
scatter(D(:,1),D(:,2),'filled');
hold on
scatter(Outlier(:,1),Outlier(:,2),'filled','r');

以下为实验数据,选用了二维坐标数据,请下载保存为DBO.txt文件

15.1 8.2
16.3 7.8
14.2 9.0
13.6 6.9
17.3 9.4
15.6 8.8
16.9 7.4
15.9 8
16.4 7.3
9.4 3.9
10.3 6.7
14.9 13.1
仿真结果如下:

          


 版权声明:本文为博主原创文章,未经博主允许不得转载。                          

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值