1、问题的提出:

电池生产中,遇到一批电池的测量结果数据:

电压值 电池个数
电压值 电池个数
电压值 电池个数
电压值 电池个数
0.056 1   4.09 1   4.146 17   4.174 13434
0.321 1   4.094 1   4.147 17   4.175 13973
0.767 1   4.099 2   4.148 19   4.176 13339
0.972 1   4.112 1   4.149 23   4.177 12275
3.098 1   4.119 3   4.15 26   4.178 10309
3.187 1   4.12 1   4.151 40   4.179 8376
3.319 1   4.121 1   4.152 50   4.18 6324
3.526 1   4.122 3   4.153 75   4.181 4667
3.53 1   4.125 3   4.154 84   4.182 3340
3.532 1   4.126 2   4.155 100   4.183 2358
3.54 1   4.127 1   4.156 118   4.184 1719
3.541 1   4.128 2   4.157 153   4.185 1199
3.544 1   4.129 3   4.158 173   4.186 839
3.545 2   4.13 2   4.159 248   4.187 622
3.832 1   4.132 2   4.16 335   4.188 417
3.928 1   4.133 2   4.161 419   4.189 304
3.93 1   4.134 4   4.162 540   4.19 170
3.951 1   4.135 1   4.163 731   4.191 124
3.963 1   4.136 5   4.164 962   4.192 77
3.972 1   4.137 4   4.165 1359   4.193 43
3.973 2   4.138 6   4.166 1846   4.194 44
4.045 1   4.139 9   4.167 2621   4.195 25
4.046 1   4.14 2   4.168 3728   4.196 20
4.079 1   4.141 6   4.169 5086   4.197 8
4.085 1   4.142 4   4.17 6822   4.198 9
4.087 1   4.143 6   4.171 8649   4.199 5
4.088 1   4.144 13   4.172 10210   4.2 3
4.089 1   4.145 14   4.173 12072      

其中,有一部分电池的电压出现过低和过高的情况,并不符合正态分布。

现在需要剔除这些异常的电池数据。

2、方法原理:

3σ准则又称为拉依达准则,它是先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除。
在正态分布中σ代表标准差,μ代表均值。x=μ即为图像的对称轴
3σ原则:
数值分布在(μ-σ,μ+σ)中的概率为0.6827
数值分布在(μ-2σ,μ+2σ)中的概率为0.9544
数值分布在(μ-3σ,μ+3σ)中的概率为0.9974
可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%。

3、C#的具体实现:

//定义电压-数量关系的类
    public class VoltageCount
    {
        public Double Voltage { get; set; }
        public int CountV { get; set; }
        public VoltageCount()
        {
        }

public VoltageCount(Double voltage, int countV)
        {
            this.Voltage = voltage;
            this.CountV = countV;
        }
    }

//关键类使用拉依达准则(3σ准则)剔除数据异常

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Photo.QQAA.Net.Helper
{
    /// <summary>
    /// 使用拉依达准则(3σ准则)剔除数据异常
    /// </summary>
    public class ExceptionVoltageHelper
    {
        List<VoltageCount> listVoltageCount;
        double average = 0.0;
        int _badDataCount = -1;//奇异值个数

/// <summary>
        /// 获取奇异值个数
        /// </summary>
        public int BadDataCount
        {
            get { return _badDataCount; }
        }

public ExceptionVoltageHelper(List<VoltageCount> list)
        {
            this.listVoltageCount = list;
            SetAverage();
        }

/// <summary>
        /// 取得平均电压值
        /// </summary>
        /// <returns></returns>
        protected double GetAvgVoltage()
        {
            double avg = 0;
            double total = 0;
            int allCount = 0;
            foreach (VoltageCount vc in listVoltageCount)
            {
                double v = vc.Voltage;
                int c = vc.CountV;
                total += v * c;
                allCount += c;
            }
            avg = total / (allCount * 1.0);

return Math.Round(avg, 3, MidpointRounding.AwayFromZero);
        }

/// <summary>
        /// 平均值
        /// </summary>
        /// <returns></returns>
        void SetAverage()
        {
            this.average = GetAvgVoltage();
        }

/// <summary>
        /// 标准差
        /// </summary>
        /// <returns></returns>
        double StandardDeviation()
        {
            List<double> listDataV = new List<double>();
            foreach (VoltageCount vc in this.listVoltageCount)
            {
                double v = vc.Voltage;
                int countV = vc.CountV;
                for (int i = 0; i < countV; i++ )
                {
                    listDataV.Add((v - this.average) * (v - this.average));
                }
            }
            double sumDataV = listDataV.Sum();
            double std = Math.Sqrt(sumDataV / (listDataV.Count - 1));

return std;
        }

public List<VoltageCount> GetGoodList()
        {
            _badDataCount = 0;
            double sd3 = StandardDeviation() * 3;//3倍标准差
            List<VoltageCount> listVC = new List<VoltageCount>();
            foreach (VoltageCount vc in this.listVoltageCount)
            {
                if (Math.Abs(vc.Voltage - this.average) <= sd3)
                {
                    listVC.Add(vc);
                }
                else
                {
                    _badDataCount += vc.CountV;
                }
            }

return listVC;
        }

}
}

4、局限性及注意事项:

本3σ法则仅局限于对正态或近似正态分布的样本数据处理,且适用于有较多组数据的时候。
这种判别处理原理及方法是以测量次数充分大为前提的,当测量次数的情形用准则剔除粗大误差是不够可靠的。因此,在测量次数较少的情况下,最好不要选用准则,而用其他准则。

C 使用拉依达准则(3σ准则)剔除异常数据( Net剔除一组数据中的奇异值)相关推荐

  1. matlab实现拉依达准则,拉依达准则matalb程序

    页数:2 中图分类:O212 正文语种:CHI 关键词:数据分析;甑别值;拉依达准则;肖维勒准则;格拉布斯准则 摘要:对测量数据进行分析,是为了及时发现错误,防止错误,数据...... 原始信号 中值 ...

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

    拉依达检验法(pauta) 拉依达准则_百度百科 (baidu.com) 拉依达公式: S为样本标准差,3s水平相当于显著水平0.01,2s相当于显著水平0.05 Xp为当前检验的样本参数值,与其相减 ...

  3. 【数据异常校验】拉依达准则( PauTa Criterion 或 3σ准则) 处理异常数据

    拉依达准则是指先假设一组检测数据只含有随机误差,对其进行计算处理得到标准偏差,按一定概率确定一个区间,认为凡超过这个区间的误差,就不属于随机误差而是粗大误差,含有该误差的数据应予以剔除. 这种判别处理 ...

  4. C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值)

    1.问题的提出: 电池生产中,遇到一批电池的测量结果数据: 电压值 电池个数 电压值 电池个数 电压值 电池个数 电压值 电池个数 0.056 1   4.09 1   4.146 17   4.17 ...

  5. 进阶版拉依达准则(3sigm准则)的提出与应用

    修正版拉依达准则的提出与应用 前言 一:基于实验说明异常点对模型结果的影响 二:异常点的判定 三:修正版拉依达准则(3σ准则) 四:理论验证 五:代码实现 六:总结 前言 在前两次文章中,我们都提到异 ...

  6. java中算术异常值_依据拉依达准则来剔除异常值程序

    java源码在下,在main主方法里的data数组里输入要测量的数据(个数长度>=10个),会判断里面有误异常值,如果有则警告 /** * @author 廖启安 * @data 2018年4月 ...

  7. 拉依达准则剔除数据异常

    /// <summary>     /// 拉依达准则剔除数据异常     /// </summary>     public class DataExceptionHelpe ...

  8. 数据预处理 拉依达准则 matlab,数学建模数据预处理.doc

    数据预处理 摘要 目前,大量研究工作都集中于数据挖掘算法的探讨,而忽略了对数据预处理的研究.事实上,数据预处理对数据挖掘十分重要,而且必不可少.要使数据挖掘出有效的知识,必须为其提供干净,准确,简洁的 ...

  9. 拉依达准则python实现

    根据拉依达准则(3σ准则)去除异常值 3σ准则:设对被测量变量进行等精度测量,得到x1,x2,--,xn,算出其算术平均值x及剩余误差vi=xi-x(i=1,2,-,n),并按贝塞尔公式算出标准误差σ ...

  10. matlab拉依达法,基于拉依达准则的奇异数据滤波法.ppt

    基于拉依达准则的奇异数据滤波法 第四章 智能仪器的基本数据处理算法 数据处理能力是智能仪器水平的标志,不能充分发挥软件作用,等同硬件化的数字式仪器. 基本数据处理算法内容提要 克服随机误差的数字滤波算 ...

最新文章

  1. AI攻击AI,升级的网络安全战
  2. Wireshark数据抓包教程之认识捕获分析数据包
  3. 【MFC】1.Windows程序内部运行原理
  4. pyspark启动时卡住了
  5. 域名解析是否生效实时检测(阿里云DNS检测)
  6. 2020年中国基层医疗研究报告
  7. 找软件开发开发工作_将求职变成开发项目
  8. Flink java wordcount案例(批处理、流处理)
  9. 4.4GDI基本图形
  10. 计算机网络数据链路层之其基础概述
  11. 精仿blbl视频播放器源码 cms播放器 支持加视频LOGO
  12. Win10语言包下载
  13. windows XP 搭建asp运行环境
  14. 基于软件仿真的PLC系统测试技术
  15. 马科维茨投资组合有效集、最优投资组合
  16. [双目视差] 单双目MATLAB 相机标定(二)双目摄像机标定
  17. 彼得·林奇的 PEG 估值策略
  18. python生成所有6位数的数字手机验证码(000000-999999)
  19. android 水波纹扩散动画,[Android]多层波纹扩散动画——自定义View绘制
  20. 整理大厂高频核心前端面试题,五万多字,面试必考

热门文章

  1. viper4android 6.0脉冲,【详解】v4a音效脉冲样本
  2. 本草纲目pdf彩图版下载_本草纲目彩色图谱下载|本草纲目彩色图集(精编珍藏版) PDF电子版 - 天天游戏吧...
  3. 惯导系统模型及其仿真(五)
  4. js 实现纯前端将数据导出excel两种方式,亲测有效
  5. iOS 将PCM格式转换为WAV格式 播放wav音频或者直接播放pcm文件
  6. Vue项目中 实现ElementUi框架el-select拼音搜索功能
  7. 如何通过 SSH 连接到 Docker 容器
  8. sosoapi 项目之本地搭建
  9. java 分页的总页数算法
  10. 基于asp.net大学生助学贷款管理系统#毕业设计