zoukankan      html  css  js  c++  java
  • 基于欧氏距离和马氏距离的异常点检测—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

  • 相关阅读:
    c# excel sheep 导出
    C# 导出 excel 复杂格式 html导出
    C# 导出CSV功能记录下
    怎样查看修改sqlserver数据库的编码格式
    entity framework如何控制并发
    IT技术 | 让程序员抓狂的排序算法教学视频
    关于高性能的那点事
    论C#逼格手册
    numpy.loadtxt用法
    numpy中np.c_和np.r_
  • 原文地址:https://www.cnblogs.com/xiaohuahua108/p/6641629.html
Copyright © 2011-2022 走看看