【数据挖掘】3σ原则识别数据中的异常值(附代码)

写在前面:
首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。

路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就一定能够把宏伟目标变为美好现实。

今天给大家分享一个异常值处理的小方法,它的名字叫3σ原则,在实际项目中使用这个方法对异常数据进行处理,模型精度必须猛涨。多的不说,少的不唠,下面开始今天的教程。

1、引言

异常值是指数据样本中的一些数值明显偏离其他的样本值,这些偏离其他样本值的异常值也称离群点,异常值分析则也称为离群点分析。

在机器学习、数据分析、数据挖掘项目中,需要对数据集进行异常值处理(包括直接删除或者数据修正),这样处理的目的是方便后续更好地进行信息挖掘,减少噪声数据的干扰,提高分析的准确性[1]。

2、3σ原则

3σ原则,又叫拉依达原则,是一基于正态分布的数学原理,它假设一组检测数据中只含有随机误差,通过计算得到标准偏差σ,然后按一定概率确定一个区间,对于超过这个区间的误差,就不属于随机误差而是粗大误差,将含有粗大误差的数据进行剔除[2]。

在统计学中,如果一个变量服从正态分布,且它的均值是u, 标准差是σ,那么将有:

(1)68.27%的数据会落在 u ± σ 内,即数据分布在处于(u−σ, u+σ)中的概率是0.6827

(2)95.45%的数据会落在 u ± 2σ 内,即数据分布在处于(u−2σ, u+2σ)中的概率是0.9545

(3)99.73%的数据会落在 u ± 3σ 内,即数据分布在处于(u−3σ, u+3σ)中的概率是0.9973

通常认为,数据“Y”的取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的可能性仅占不到0.3%,这些超出该范围的数据可以认为是异常值[2]。

(注:此部分内容为3σ原则的定义,已做了引用,无不良引导,不存在滥用原创的情况)

3、代码

3.1 数据

import numpy as np  
import matplotlib.pyplot as plt  
from scipy.stats import lognorm  
import pandas as pd

  
# 设置参数  
s = 0.5  # 形状参数(σ),较小的值会导致更重的右尾  
mean = 0  # 对数正态分布的底数(μ)对应的对数均值  
scale = np.exp(s**2)  # 尺度参数(exp(σ^2)),确保对数正态分布的方差正确  
n_samples = 1000  # 样本数量  
  
# 生成对数正态分布数据  
data = lognorm.rvs(s=s, scale=scale, size=n_samples)  

# 写入excel
df = pd.DataFrame(data)
df.to_excel("data.xlsx", index=False, header=None)
 
# 绘制直方图  
plt.hist(data, bins=30, density=True, alpha=0.6, color='g')  
  
# 绘制对数正态分布曲线作为参考  
xmin, xmax = plt.xlim()  
x = np.linspace(xmin, xmax, 100)  
pdf_values = lognorm.pdf(x, s=s, scale=scale)  
plt.plot(x, pdf_values, 'k', linewidth=2, label='Lognormal Distribution (s={})'.format(s))  
  
# 设置图表标题和坐标轴标签  
plt.title('Lognormal Distribution with Long Right Tail (s={})'.format(s))  
plt.xlabel('Value')  
plt.ylabel('Probability Density')  
plt.legend()  
  
# 显示图形  
plt.grid(True)  
plt.show()

数据分布图如下:

3.2 3σ代码

def three_sigma(data_df, column):
    out_index = []
    mean_value = data_df[column].mean()        # 求平均值
    std_value = data_df[column].std()          # 求标准差
    # print("均值和标准差", mean_value, std_value)
    lower_bound = mean_value-3*std_value
    upper_bound = mean_value+3*std_value
    rule = (data_df[column] < lower_bound) | (data_df[column] > upper_bound)  
    # 位于(u-3std,u+3std)区间的数据是正常的,不在这个区间的数据为异常的
    out = data_df[column].index[rule]
    # print("异常索引:", out)
    out_index += out.tolist() 
    data_df.drop(out_index, inplace=True)
    return data_df

上面的代码做了单列数据的异常剔除,如果需要多列异常剔除,需要对代码进行改写。

4、优缺点

4.1、3σ原则的优点

1.简单易懂:3σ原则基于标准差的观念,提供了一个直观且易于理解的判断标准。通过计算数据的平均值和标准差,并与3σ进行比较,可以快速判断数据是否处于正常范围内。

2.科学性和客观性:由于3σ原则基于统计学原理,其判断具有一定的科学性和客观性。它依赖于数据的统计特性,而不是主观的、经验性的判断。

3.有效检测异常值:根据正态分布的特性,大约有99.73%的数据落在u±3σ范围内。因此,当一个数据点落在这一范围之外时,可以初步判断为异常值。

4.2、3σ原则的缺点

1.对样本量的依赖:3σ原则的有效性依赖于样本量的大小。当样本量较小时,使用3σ原则进行异常值检测可能不够可靠。因为小样本数据可能无法准确反映总体的分布特性。

2.对非正态分布数据的限制:3σ原则主要适用于具有正态分布或近似正态分布特性的数据。对于非正态分布的数据,3σ原则可能无法有效检测异常值,甚至可能出现误判。

写在最后

在实际的数据挖掘项目中,请结合自身数据情况,酌情使用3σ原则。

参考资料

[1]https://zhuanlan.zhihu.com/p/572327280?utm_id=0
[2]https://zhidao.baidu.com/question/585044313.html
[3]https://www.sohu.com/a/365218206_387904
[4]https://blog.csdn.net/Jormungand_V/article/details/109775367
[5]https://blog.51cto.com/u_15834745/6011865
[6]https://www.cnblogs.com/Tree0108/p/12116099.html

在这里插入图片描述

请扫码关注下方的公众号,让我们共同进步吧。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生态系统服务功能之碳储量

大家好&#xff0c;这期开始新生态系统服务功能即碳储量的计算&#xff0c;这部分较简单&#xff0c;下面让我们开始吧&#xff01;&#xff01;&#xff01; 碳储量的计算公式 生态系统通过从大气中释放和吸收二氧化碳等温室气体来调节地球气候&#xff0c;而森林、 草原和沼…

论文作图之高压缩比导出PDF

笔者使用Adobe Illustrator 2023创建可编辑pdf图&#xff0c;按照默认的导出设置保存pdf文件时&#xff0c;得到的图存储很大。为了解决存储过大且还保留一定编辑功能的问题&#xff0c;作者实践出了一种导出pdf的设置方法。 首先在AI中点击文件->存储为&#xff0c;点击保…

【Java】面向对象的三大特征:封装、继承、多态

封装 什么叫封装&#xff1f; 在我们写代码的时候经常会涉及两种角色&#xff1a; 类的实现者 和 类的调用者。 封装的本质就是让类的调用者不必太多的了解类的实现者是如何实现类的&#xff0c; 只要知道如何使用类就行了&#xff0c;这样就降低了类使用者的学习和使用成本&a…

民国漫画杂志《时代漫画》第39期.PDF

时代漫画39.PDF: https://url03.ctfile.com/f/1779803-1248636473-6bd732?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

问界新M7 Ultra仅售28.98万元起,上市即交付

5月31日&#xff0c;问界新M7 Ultra正式上市。发布会上&#xff0c;鸿蒙智行旗下多款产品交出最新答卷——问界新M5上市1个月大定突破2万台&#xff1b;智界S7位列30万纯电轿车4月交付量NO.3&#xff1b;问界M9上市5个月大定突破9万台。其中&#xff0c;作为中国高端豪华SUV市场…

【Linux】日志管理

一、日志进程 1、处理日志的进程 rsyslogd&#xff1a;系统专职日志程序 观察rsyslogd程序&#xff1a; ps aux | grep rsyslogd 2、常见的日志文件 1、系统主日志文件: /var/log/messages 动态查看日志文件尾部&#xff1a; tail -f /var/log/messages 2、安全…

车载软件架构 - AP AUTOSAR 设计思想及原理

车载软件架构 - AP AUTOSAR 设计思想及原理 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消…

SpringAdminClient如何将Httpbasic账号密码告知SpringAdminServer

场景&#xff0c;因为Config Service开了权限校验&#xff0c;注册到eureka之后&#xff0c;SpringAdmin查看信息会报错401&#xff0c;如果想在SpringAdmin中正确的看到Config Service的actuator信息则需要将账号密码告知给SpringAdmin&#xff0c;磁力用的是Eureka作为发现服…

泄漏libc基地址

拿libc基地址 方法一&#xff1a;格式化字符串 格式化字符串&#xff0c;首先确定输入的 AAAA 在栈上的位置&#xff08;x&#xff09;。使用 elf.got[fun] 获得got地址。利用格式化字符串&#xff0c;构造payload泄漏got地址处的值&#xff0c;recv接受到的字符串中&#xf…

力扣之链表专题

1. (LeetCode-21)合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 …

AIGC绘画设计——midjourney有哪些好用的关键词?

midjourney有哪些高级关键词&#xff1f; 这一期继续分享一些高级的关键词&#xff0c; 我有一些案例也是从其他博主那学习来的&#xff0c; 但为了尽可能不出错&#xff0c;每个案例都是自己尝试了很多次后才拿出来的。 挑选了几个效果比较好&#xff0c;使用场景较高的类型…

牛客NC164 最长上升子序列(二)【困难 贪心+二分 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/4af96fa010c44638a7e112abf65f7237 思路 贪心二分 所谓贪心&#xff0c;就是往死里贪&#xff0c;所以对于最大上升子序列&#xff0c;结尾元素越小&#xff0c;越有利于后面接上其他的数&#xff0c;也就可能变…

这里一定有你不知道的VS调试技巧

目录 使用环境&#xff1a;Visual Studio 2022,如无特殊说明&#xff0c;都是在Debug、x64环境下编译 一.什么是BUG 二.调试快捷键 F9&#xff1a;创建断电或取消断点 条件断点&#xff1a;满足这个条件才触发 F5&#xff1a;启动调试&#xff0c;经常⽤来直接跳到下⼀个断…

Windows通过cmd运行快速启动应用

Windows如何通过cmd运行快速启动应用&#xff1f; 在Windows操作系统中&#xff0c;可以通过配置环境变量的方式将文件的路径配置到环境变量的path中&#xff0c;配置完成后可以在cmd中输入对应的应用名称即可启动应用&#xff0c;具体操作如下&#xff1a; 1. 添加应用程序路径…

【机器学习300问】102、什么是混淆矩阵?

一、混淆矩阵的定义 混淆矩阵是一种用于评估分类模型性能的评估指标。当模型对数据进行预测并将数据分配到预定义的类别时&#xff0c;混淆矩阵提供了一种直观的方式来总结这些预测与数据实际类别之间的对应关系。具体来说&#xff0c;它是一个表格。 二、分类模型性能评估一级…

项目启动 | 宏昌电器牵手盘古信息,数字化制造引领企业高质量发展

随着时代的发展&#xff0c;数字化转型已成为实现企业持续增长和塑造竞争优势不可或缺的关键因素。浙江宏昌电器科技股份有限公司&#xff08;以下简称为“宏昌电器”&#xff09;围绕企业战略发展需求&#xff0c;积极加速数字化转型升级进程&#xff0c;以数字化力量推动公司…

VS Code 开发小技巧

VS Code的开发小技巧 添加代码片段 平时开发的时候&#xff0c;可以快速创建一个空白的模板。 一个快速生成代码片段的网站&#xff1a;https://snippet-generator.app/ 打开网站&#xff0c;把常用的模板代码复制进去&#xff0c;就会自动生成VS Code可以使用的代码片段了。…

【上海大学计算机组成原理实验报告】六、内存系统实验

一、实验目的 学习内存访问机制。理解代码和数据的分区存放原理和技术。 二、实验原理 根据实验指导书的相关内容&#xff0c;地址寄存器MAR用来存放要进行读或写的存储器EM的地址。其内容经数据总线DBUS写入&#xff0c;因此必须在数据总线上具有数据后&#xff0c;配合MAR允…

element-ui表格全选

项目场景&#xff1a; 根据项目需求&#xff0c;要求在表格外加【全选】复选框&#xff0c;切换分页也需将每一行都勾选上 实现方式&#xff1a; 借用element-ui文档的这几个方法和属性 <el-checkboxv-model"checkAll"change"handleCheckAllChange"&g…

【linux】宝塔,首页挂载磁盘,显示使用情况

挂载前&#xff1a; 挂载后&#xff1a; 数据无价&#xff0c;建议&#xff1a;备份需要挂载的磁盘&#xff0c;或者使用新磁盘来进行操作。 1、下载自动挂载磁盘的脚本&#xff1a; wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh 2、给脚本添加执行权限&a…