matlab 基于拉依达检验法(3σ准则) 实现多类别多参数的批量异常样本检验 V2.0

news2024/11/27 0:48:35

简介

拉依达检验法(3σ准则)是一种统计学方法,用于检测数据中的异常值。这种方法基于正态分布的特性来确定数据点是否可能是异常值。以下是关于拉依达检验法(3σ准则)的详细介绍:

  1. 基本原理

    • 拉依达检验法(3σ准则)假设一组检测数据只含有随机误差,通过对数据进行计算处理得到标准偏差σ(sigma)。
    • 在正态分布中,数据点通常集中在均值μ(mu)附近,而标准偏差σ表示数据的离散程度。
    • 根据正态分布的性质,大部分数据点(约68.26%)会分布在μ±σ之间,约有95.44%的数据点分布在μ±2σ之间,而几乎所有的数据点(约99.7%)都会分布在μ±3σ之间。
  2. 应用方法

    • 首先,计算数据的均值μ和标准偏差σ。
    • 然后,确定一个区间,即μ±3σ。
    • 任何超出这个区间的数据点被认为是异常值,可能由于粗大误差或过失误差引起,这些异常值应予以剔除或进行进一步检查。
  3. 适用范围与局限性

    • 拉依达检验法(3σ准则)主要适用于正态或近似正态分布的数据集。
    • 该方法以测量次数充分大为前提,当测量次数较少时,使用此方法剔除粗大误差可能不够可靠。
    • 因此,在数据量较小的情况下,应谨慎使用此方法,并可能需要选择其他更适用的方法。

这一个版本的代码,针对之前代码[1]的不足和问题,对程序进行了进一步的优化。

[1]:matlab 基于拉依达检验法(3σ准则) 实现多类别多参数的批量检验异常值与异常样本_拉依达准则matlab-CSDN博客

代码简介和说明

输入数据:

数据每行代表一个样本,每列代表一个参数   

输入数据的第一列为类别表示,即同一类别用相同的数字标识:

主程序:

%拉伊达检验法;不同样本在不同行,不同参数不同列
%输入 data:数据表格,其中第1列为标识
%输出:Errorshow 异常样本所在的行数,以及异常的参数内容(列)
%输入:resData 剔出异常样本后的表格
clear all

%%参数设置区域

data=xlsread("test.xlsx");%输入表格

%按数字标识的方法
nameNum=[1,2,3,4,5,6];%输入每个处理数字标识,自己可以设定(","衔接)
[~,classNum]=size(nameNum);
maxCheck_num=100;%最大循环检验次数

%%
[maxrow,~]=size(data);
data=[(1:maxrow)',data];%增加序号标识

for i=1:classNum%遍历不同的处理
    indexlist=find(data(:,2)==nameNum(1,i));
    testdata=data(indexlist,:);
    [IFPa,ErrorRowindex{i},res]=patuaC(testdata,maxCheck_num,nameNum(i));
    if i==1
        resdata=res;
    else
        resdata=[resdata;res];
    end
end
%将异常样本整合在一个表中展示
Errorshow=zeros(1,length(data(1,:)));
for i=1:classNum%类别
    for p=3:length(data(1,:))%参数
        for j=1:length(ErrorRowindex{i}{p-2}())%行号
            Errordet=zeros(1,length(data(1,:)));
            if ErrorRowindex{i}{p-2}(j)~=0
                if ismember(ErrorRowindex{i}{p-2}(j),Errorshow(:,1))
                    Errorshow(  find(Errorshow(:,1)==ErrorRowindex{i}{p-2}(j)) ,p-1)=1;
                else
                    Errordet(1,1)=[ErrorRowindex{i}{p-2}(j)];
                    Errordet(1,p-1)=1;
                    Errorshow=[Errorshow;Errordet];
                end
            end
        end
    end
end
Errorshow=sortrows(Errorshow,1);%排序

自定义函数patuaC

(将其放入和主程序同一文件夹内后运行主程序)

function  [IFPa,ErrorRowindex,resdata]=patuaC(inputdata,maxCheck_num,classindex)
%输入:
% inputdata:检验的数据
%maxCheck_num:最大迭代次数
%classindex:样本代号
%输出:
%IFPa:逻辑值,是否有异常样本
%ErrorRowindex:异常样本的位置信息
%resdata:剔除异常值剩余的数据


%   此处显示详细说明

resdata=inputdata;
for i=1:maxCheck_num
    [yn,xn]=size(resdata);
    Slist=std(resdata);%计算方差和均值
    Ave=mean(resdata);
    IFPacir=false;
    for coln=3:xn
        ErrorRow{coln-2}=[0];

        for rown=1:yn

            if abs(resdata(rown,coln)-Ave(coln))>3*Slist(coln)
                IFPacir=true;
                ErrorRow{coln-2}=[ErrorRow{coln-2};resdata(rown,1)];
            end
        end
    end

    if IFPacir%如果有问题数据
        %删除有问题的行
        for coln=1:xn-2
            if i~=1
                ErrorRowindex{coln}=[ErrorRowindex{coln};ErrorRow{coln}];
            else
                ErrorRowindex{coln}=ErrorRow{coln};
            end
            [cirN,~]=size(ErrorRow{coln});
            for dn=1:cirN
                if ismember(ErrorRow{coln}(cirN),resdata(:,1))
                    resdata(find(resdata(:,1)==ErrorRow{coln}(cirN)),:)=[];
                end
            end
        end
    else
        break
    end
end
abnormal_samples = length(inputdata(:,1)) - length(resdata(:,1));
if abnormal_samples~=0
    IFPa=true;
end
percentN=(length(inputdata(:,1)) - length(resdata(:,1)))/length(inputdata)*100;
message = sprintf('在类别"[%d]"中找到 %d 个异常样本,占比%.2f%%', classindex,abnormal_samples,percentN);
disp(message);

执行效果:

控制窗输出异常样本信息:

异常样本的整合信息Errorshow:

第一行是异常样本原来所在的行号,对应的列为1代表该列的参数不满足检验假设;

数据分享:

我将脚本使用的检验数据分享给各位,方便复现和了解:

链接:https://pan.baidu.com/s/1_OGMMluQgusFV66v-4xOQQ?pwd=cvws 
提取码:cvws 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式锁概述

什么是分布式锁 分布式锁是一种在分布式计算环境中用于同步访问共享资源的机制。它的主要目的是在一个分布式系统中,当多个进程或服务需要同时访问同一个资源时,确保任一时刻只有一个进程或服务能够执行涉及该资源的关键操作。这类似于传统单体应用中的…

C语言判断字符旋转

前言 今天我们使用c语言来写代码来实现字符串选择的判断,我们来看题目 题目描述 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 AABCD和s2 BCDAA,返回1 给定s1abcd和s2ACBD,返回0. A…

【分治算法】【Python实现】快速排序

文章目录 [toc]Python实现时间复杂性最坏时间复杂性最好时间复杂性平均时间复杂性 个人主页:丷从心 系列专栏:分治算法 学习指南:算法学习指南 Python实现 def partition(arr, low, high):pivot arr[low]# 将 pivot 元素移动到列表的最右…

flutter中固定底部按钮,防止键盘弹出时按钮跟随上移

当我们想要将底部按钮固定在底部,我们只需在Widget中的Scaffold里面加一句 resizeToAvoidBottomInset: false, // 设置为false,固定页面不会因为键盘弹出而移动 效果图如下

OFD(Open Fixed-layout Document)

OFD(Open Fixed-layout Document) ,是由工业和信息化部软件司牵头中国电子技术标准化研究院成立的版式编写组制定的版式文档国家标准,属于中国的一种自主格式,要打破政府部门和党委机关电子公文格式不统一,以方便地进行电子文档的…

pwn学习(一)

pwn:二进制漏洞挖掘与利用(程序里面的漏洞) CTF中的Pwn是仅保留漏洞代码和基本逻辑的二进制程序,选手通过自身对漏洞的熟悉程度来快速的在逆向分析中找到漏洞点,并且结合自身对漏洞利用的熟悉程度来编写EXP脚本,从而获…

pxe远程安装

PXE 规模化:可以同时装配多台服务器 自动化:自动安装操作系统和各种配置 不需要光盘U盘 前置需要一台PXE服务器 pxe是预启动执行环境,再操作系统之前运行 实验: 首先先关闭防火墙等操作 [rootlocalhost ~]# systemc…

Linux学习之路 -- 文件 -- 文件描述符

前面介绍了与文件相关的各种操作&#xff0c;其中的各个接口都离不开一个整数&#xff0c;那就是文件描述符&#xff0c;本文将介绍文件描述符的一些相关知识。 目录 <1>现象 <2>原理 文件fd的分配规则和利用规则实现重定向 <1>现象 我们可以先通过prin…

搭建父模块和工具子模块

第一章 项目父模块搭建 1.1 nancal-idsa 作为所有工程的父工程&#xff0c;用于管理项目的所有依赖版本。 1.2 指定 pom 类型模块&#xff0c;删除 src 目录&#xff0c;点击Reload project 1.3 添加依赖 pom.xml <parent> <groupId>org.springframework.…

纯干货,源代码防泄露的有效方法

随着云计算、移动互联、物联网等新技术的发展&#xff0c;传统的安全边界变得越来越模糊&#xff0c;访问控制模式局限性也越来越明显。企业需满足员工在任意时间、地点对企业内部进行访问的需求&#xff1b;服务器之间各自为界、相互独立&#xff0c;缺乏统一的安全管理标准&a…

DeepSeek发布全新开源大模型,GPT-4级别能力 价格仅百分之一

最新国产开源MoE大模型&#xff0c;刚刚亮相就火了。 DeepSeek-V2性能达GPT-4级别&#xff0c;但开源、可免费商用、API价格仅为GPT-4-Turbo的百分之一。 因此一经发布&#xff0c;立马引发不小讨论。 从公布的性能指标来看&#xff0c;DeepSeek-V2的中文综合能力超越一众开源…

第六代移动通信介绍、无线网络类型、白皮书

关于6G 即第六代移动通信的介绍&#xff0c; 图解通信原理与案例分析-30&#xff1a;6G-天地互联、陆海空一体、全空间覆盖的超宽带移动通信系统_6g原理-CSDN博客文章浏览阅读1.7w次&#xff0c;点赞34次&#xff0c;收藏165次。6G 即第六代移动通信&#xff0c;6G 将在5G 的基…

初识Node.js-认识node(安装Node.js环境配置)

目录 一、node介绍 1.概念和特点 2.核心功能 3.应用场景 二、Node初使用 1.安装node配置 windows上安Node.js 1.windows安装包&#xff08;.msi&#xff09; 2、Windows 二进制文件 (.exe)安装 Linux 上安装 Node.js 直接使用已编译好的包 Ubuntu 源码安装 Node.js …

Linux进程地址空间第三讲

至今为止&#xff0c; 我们所学到的大多数的知识&#xff0c; 包括语言&#xff0c; 数据结构&#xff0c; 动静态库等等的 都是在下面这3G&#xff0c; 也就是用户空间里的(进程等待&#xff0c; 信号之类的与内核有关的是在上面那1G里的) 所以对于我们来说&#xff0c; 我们…

避雷!5.3分,新增1区被标记On Hold,共12本SCI/SSCI慎投!

本周投稿推荐 SSCI • 2/4区经管类&#xff0c;2.5-3.0&#xff08;录用率99%&#xff09; SCIE&#xff08;CCF推荐&#xff09; • 计算机类&#xff0c;2.0-3.0&#xff08;最快18天录用&#xff09; SCIE&#xff08;CCF-C类&#xff09; • IEEE旗下&#xff0c;1/2…

贪吃蛇游戏(C语言实现)

目录 游戏效果展示文件代码的展示test.cSnake.cSnake.h 下一个坐标不是食物 游戏效果展示 QQ录屏20240507163633 文件 代码的展示 test.c #define _CRT_SECURE_NO_WARNINGS#include<locale.h> //设置本地化 #include"Snake.h"//游戏的测试逻辑 void test() {…

免单狂欢模式:电商销售的新风潮

免单狂欢模式&#xff0c;是电商行业里一股新兴的销售力量。它以其独特的激励机制、社交属性与合规运营&#xff0c;迅速吸引了众多消费者的目光&#xff0c;成为推动销售业绩飙升的强大动力。 一、合规运营&#xff0c;稳健发展 在免单狂欢模式中&#xff0c;我们严格遵守法律…

搭建Harbor仓库

文章目录 Harbor仓库搭建Harbor仓库安装 docker 服务修改配置文件 Harbor仓库 搭建Harbor仓库 下载 Harbor 仓库 安装 docker 服务 # step 1: 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 yum-config-m…

NFCP502-W05 电流数据是多少安培?

YOKOGAWA NFCP502-W05 是一款由横河电机&#xff08;Yokogawa Electric Corporation&#xff09;生产的微型断路器&#xff08;Microcircuit Breaker&#xff0c;简称 MCB&#xff09;。 横河电机是一家日本的跨国公司&#xff0c;专注于自动化和控制系统、仪器和其他相关设备…

sh包装脚本

两个脚本,运行的时间间隔分别是一分钟和五分钟,放入到sh文件中,挂在后代,脚本里面的路径最好是绝对路径。 新建sh文件 新建 run_test.sh 文件,使其可以运行两个不同的 Python 脚本,一个每分钟运行一次,另一个每五分钟运行一次。下面是修改后的 run_test.sh 文件的示例:…