• 基于欧氏距离和马氏距离的异常点检测—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

  • 相关阅读:
    针对Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1的解决方案
    MAC配置C++运行环境
    Keras 模型相关操作
    微信小程序 WXS
    vue 长列表优化
    webpack4 SplitChunks插件 代码拆分
    node path api
    mysql的模型依赖说明
    MySQL和MyCat replace
    SQL Server中WITH(NOLOCK)提示用在视图上会怎样(转载)
  • 原文地址:https://www.cnblogs.com/xiaohuahua108/p/6641629.html
Copyright © 2020-2023  润新知