机器学习中异常值的处理方式

背景

3Sigma、Z-Score、box plot、Grubbs假设检验四种分布异常值检验方法可以帮助在数据中识别异常值,而在机器学习中,异常值的检测对模型性能和结果的准确性具有重要影响。

  • 3 Sigma法:

原理:通过计算数据的均值和标准差,然后确定在正态分布中距离均值3个标准差之外的数据点,将其视为异常值。

对机器学习的作用:可以在数据预处理阶段使用,帮助剔除明显偏离正常范围的数据点,提高模型的鲁棒性。

  • Z-score法:

原理:类似于3 Sigma法,通过计算数据点与均值的偏差,以标准差为单位表示。超过阈值的数据点被认为是异常值。

对机器学习的作用:用于标准化数据,帮助模型更好地处理不同尺度的特征,同时检测和处理异常值。

  • Boxplot(箱线图):

原理:利用数据的四分位数范围和箱线图的上下边缘来识别异常值。数据点落在箱线图之外的被认为是异常值。

对机器学习的作用:可以用于可视化异常值的分布情况,帮助数据分析和清理。在模型训练前,可以基于箱线图的结果选择是否去除异常值。

  • Grubbs假设检验:

原理:基于假设检验,Grubbs检验用于检测样本中是否存在显著的异常值,通过计算统计值和比较与临界值的关系。

对机器学习的作用:提供了一种统计学上的检验手段,可以更严格地判断数据中的异常值。在需要较高精度的应用中,可以考虑使用Grubbs检验来识别异常值。

在机器学习中,这些异常值检测方法有助于:

提高模型的鲁棒性,减少异常值对模型的负面影响。

改善数据质量,使得模型更加可靠。

在数据预处理阶段,更好地理解数据的分布特征,选择合适的数据清理策略。

在模型评估和解释结果时,排除异常值对评估结果的干扰,提高结果的可解释性。

代码实现

from ucimlrepo import fetch_ucirepo 
# fetch dataset 
wine = fetch_ucirepo(id=109) 
# data (as pandas dataframes) 
X = wine.data.features 
y = wine.data.targets 
# metadata 
print(wine.metadata) 
# variable information 
print(wine.variables)

访问UCI机器学习数据集为实验进行数据支撑。这些数据是对意大利同一地区种植的葡萄酒进行化学分析的结果,但来自三个不同的品种。该分析确定了三种葡萄酒中每一种中发现的13种成分的数量。对其中连续型数据进行异常值检验。

Sigma法

import pandas as pd
# 定义函数 detect_outliers,接受两个参数:DataFrame 和需要检查的列名
def detect_outliers(df, column_names):# 初始化一个空的 Index,用于存储异常值的索引outlier_indices = pd.Index([])# 遍历指定的列名列表for column_name in column_names:# 计算当前列的均值和标准差mean = df[column_name].mean()std = df[column_name].std()# 计算异常值的阈值(标准差的3倍)threshold = 3 * std# 计算异常值的上下限(均值加减3倍标准差)lower_limit = mean - thresholdupper_limit = mean + threshold# 找出值在上下限之外的行outliers = df[(df[column_name] < lower_limit) | (df[column_name] > upper_limit)]# 将新找到的异常值索引与已有异常值索引合并outlier_indices = outlier_indices.union(outliers.index)# 返回所有异常值的索引列表return outlier_indices

通过遍历给定的列名列表,在每列上计算均值和标准差,并基于标准差的3倍范围来识别异常值。异常值的索引最终被存储在一个包含所有异常值索引的索引对象中,并作为结果返回。

columns_to_check = X.columns
# 使用指定的列数据来运行 detect_outliers 函数,并返回异常值的索引列表
outlier_indices = detect_outliers(X, columns_to_check)
if not outlier_indices.empty:print("超出三个标准差范围的索引:")print(outlier_indices)
else:print("没有数据超出三个标准差的范围")

图片

Z-score法

# 定义函数 detect_outliers,接受两个参数:DataFrame 和需要检查的列名
def detect_outliers(df, column_names):# 初始化一个空的 Index,用于存储异常值的索引outlier_indices = pd.Index([])# 遍历指定的列名列表for column_name in column_names:# 计算当前列的均值和标准差mean = df[column_name].mean()std = df[column_name].std()# 计算Z-scorez_scores = (df[column_name] - mean) / std# 设置 Z-score 阈值,例如,选择阈值为 3,即超过3个标准差的值被认为是异常值threshold = 3# 找出Z-score绝对值大于阈值的行outliers = df[abs(z_scores) > threshold]# 将新找到的异常值索引与已有异常值索引合并outlier_indices = outlier_indices.union(outliers.index)# 返回所有异常值的索引列表return outlier_indices

函数接受一个DataFrame和一个列名的列表作为输入,然后对每个指定的列进行Z-score异常值检测。对于每一列,它计算Z-score,然后通过设定的阈值(在这里是3)来判断哪些数据点是异常值。最终,函数返回所有异常值的索引列表。

columns_to_check = X.columns
# 使用指定的列数据来运行 detect_outliers 函数,并返回异常值的索引列表
outlier_indices = detect_outliers(X, columns_to_check)
if not outlier_indices.empty:print("超出三个标准差范围的索引:")print(outlier_indices)
else:print("没有数据超出三个标准差的范围")

图片

Boxplot(箱线图)

import matplotlib.pyplot as plt
subset_data = X
plt.figure(figsize=(10, 6))  
subset_data.boxplot() 
plt.xticks(rotation=90)  
plt.title('Boxplot')  
plt.xlabel('Indicators')  
plt.ylabel('Values') 
plt.show()

图片

箱线图(Boxplot)是一种用于显示数据分布的图表类型,它提供了对数据中心位置、离散程度以及可能存在的异常值的直观理解。以下是关于如何解释箱线图的简单说明:

箱体(Box):箱体显示了数据分布的中间50%。箱体上边界表示数据的上四分位数(Q3),下边界表示下四分位数(Q1)。箱体的长度(上四分位数和下四分位数之间的距离)代表了数据的离散程度。

中位数线(Median Line):在箱体内部画一条线,表示数据的中位数,即数据的中间值。

须线(Whiskers):须线延伸自箱体,表示数据的范围。通常,须线会延伸到最大和最小非异常值的位置。但在某些情况下,须线可能会被截断,显示有可能是异常值的点。

异常值(Outliers):被认为是异常值的个别数据点通常被绘制为散点,位于须线之外。这些点可能表示数据中的极端值或测量错误。

如何阅读箱线图:

箱体的高度和长度:高度越大,说明数据的变异程度越大;长度越长,说明数据的离散程度越大。

中位数线的位置:中位数线在箱体中央,如果箱体偏向某一侧,表示数据可能存在偏斜。

须线的长度:须线的长度表征数据的范围。较长的须线表示数据更广泛,较短的表示数据较为集中。

异常值:散点表示的异常值可能需要进一步检查,以确定它们是否是真正的异常或者是错误值。

总体而言,箱线图是一种有效的工具,可以帮助了解数据的中心趋势、离散程度以及是否存在异常值。

Grubbs假设检验

import pandas as pd
import numpy as np
from scipy.stats import tdef detect_outliers_grubbs(df, column_names, alpha=0.05):# 初始化一个空的 Index,用于存储异常值的索引outlier_indices = pd.Index([])# 遍历指定的列名列表for column_name in column_names:# 获取当前列的数据data = df[column_name]# 计算均值和标准差mean = np.mean(data)std = np.std(data, ddof=1)  # 使用样本标准差,自由度为1# 计算 Grubbs 检验的统计量n = len(data)t_critical = t.ppf(1 - alpha / (2 * n), n - 2)g = (np.max(data) - mean) / std# 设置 Grubbs 检验的阈值threshold = ((n - 1) / np.sqrt(n)) * np.sqrt(t_critical**2 / (n - 2 + t_critical**2))# 找出 Grubbs 检验的异常值outliers = df[np.abs((data - mean) / std) > threshold]# 将新找到的异常值索引与已有异常值索引合并outlier_indices = outlier_indices.union(outliers.index)# 返回所有异常值的索引列表return outlier_indices

detect_outliers_grubbs 函数接受一个 DataFrame (df)、需要检查的列名列表 (column_names)以及显著性水平的可选参数 (alpha)。对于每个指定的列,该函数执行 Grubbs 检验,识别可能的异常值。对于每列,计算均值和样本标准差,并使用 Grubbs 检验的统计量计算可能的异常值。Grubbs 检验的阈值通过计算得到,如果数据中的值超过这个阈值,就被认为是异常值。找到的异常值的索引被存储在outlier_indices中,并最终返回。

columns_to_check = X.columns
# 使用指定的列数据来运行 detect_outliers_grubbs 函数,并返回异常值的索引列表
outlier_indices = detect_outliers_grubbs(X, columns_to_check)if not outlier_indices.empty:print("Grubbs 检验发现的异常值的索引:")print(outlier_indices)
else:print("没有通过 Grubbs 检验的异常值")

图片

注意,alpha 参数用于设置显著性水平,默认为 0.05。在 Grubbs 检验中,通常使用 t 分布的临界值来计算统计量。

civilpy:Python数据分析及可视化实例目录929 赞同 · 36 评论文章​编辑

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

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

相关文章

力扣labuladong——一刷day84

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣743. 网络延迟时间 前言 Dijkstra 算法&#xff08;一般音译成迪杰斯特拉算法&#xff09;无非就是一个 BFS 算法的加强版&#xff0c;它们都是从二叉…

(Java企业 / 公司项目)Nacos的怎么搭建多环境配置?(含相关面试题)(二)

上一篇讲了一个单体服务中配置&#xff0c;传统的Nacos配置但是在微服务架构当中肯定都是多环境下配置&#xff0c;比如生产环境&#xff0c;dev测试环境等等。 第一种方式模拟开始&#xff1a; 首先展示在生产环境中nacos如何配置&#xff0c;在模块下新建一个配置文件&…

达梦数据库安装超详细教程(小白篇)

文章目录 达梦数据库一、达梦数据库简介二、达梦数据库下载三、达梦数据库安装1. 解压2. 安装 四、初始化数据库五、DM管理工具 达梦数据库 一、达梦数据库简介 ​ 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统&#xff0c;简称DM。 达梦数…

本地站点通过主备冗余专线连接上云

本地站点通过主备冗余专线连接上云 您可以使用两条物理专线以主备方式将本地数据中心IDC&#xff08;Internet Data Center&#xff09;接入阿里云。采用主备接入方式时&#xff0c;正常情况下仅主用线路在进行流量转发。阿里云按照您配置的健康检查的发包时间间隔探测主用线路…

【Midjourney】AI绘画新手教程(一)登录和创建服务器,生成第一幅画作

一、登录Discord 1、访问Discord官网 使用柯學尚网&#xff08;亲测非必须&#xff0c;可加快响应速度&#xff09;访问Discord官方网址&#xff1a;https://discord.com 选择“在您的浏览器中打开Discord” 然后&#xff0c;注册帐号、购买套餐等&#xff0c;在此不做缀述。…

uniapp+echarts开发APP版本教程

需求 需要在uniappecharts展示图表功能&#xff0c;是APP版本&#xff0c;不是小程序。找了好多教程都乱七八糟的&#xff0c;无法实现。以下是效果图 教程 1、安装插件 HBuilder安装echarts插件&#xff0c;插件地址如下。安装完成后在uni_modules/lime-echart文件夹下 ht…

12.2 【Screen配置】khronos模块配置

一,khronos配置配置简介 khronos部分的配置用于指定与Khronos相关的库和参数(例如EGL和WFD库)。 在graphics.conf配置文件中,khronos部分指定GPU和显示驱动程序。只有在系统需要这两种类型的驱动程序之一或两者时,才需要在配置文件中包含此部分。khronos部分由begin khr…

使用169.254开头的IP地址

介绍&#xff1a; 在计算机网络中&#xff0c;当设备无法通过DHCP服务器获取有效的IP地址时&#xff0c;它会尝试使用自动私有IP地址&#xff08;APIPA&#xff09;来分配一个本地链接的IP地址。APIPA地址范围从169.254.0.1到169.254.255.254。这篇文档将介绍关于使用以169.254…

主板部件

▶1.主要部件 主板是计算机的重要部件&#xff0c;主板由集成电路芯片、电子元器件、电路系统、各种总线插座和接口组成&#xff0c;目前主板标准为ATX。主板的主要功能是传输各种电子信号&#xff0c;部分芯片负责初步处理一些外围数据。不同类型的CPU,需要不同主板与之匹配。…

微信小程序+前后端开发学习材料

目录结构 全局文件 1.app.json 文件 用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。文件内容为一个 JSON 对象。 1.1 page用于指定小程序由哪些页面组成&#xff0c;每一项都对应一个页面的 路径&#xff08;含文…

docker镜像仓库详解(Docker Registry)

本片文章主要是对docker的镜像仓库进行了详解。其中包含了一些常用了 docker 指令&#xff0c;通过举例进行详解。也详细解释了镜像仓库的工作机制和常见的镜像仓库。也实际拉去和运行了一些镜像。希望本篇文章会对你有所帮助&#xff01; 文章目录 一、什么是Docker Registry …

【卡梅德生物】杂交瘤技术、噬菌体展示技术和兔单B细胞技术制备兔单抗的对比

兔单克隆抗体技术的演进经历了杂交瘤技术、噬菌体展示技术和单B细胞技术三个关键阶段。这些技术的不断进步推动了兔单克隆抗体技术的优化&#xff0c;显著提高了抗体的生产效率、特异性和适用范围。在科研和医药领域&#xff0c;兔单克隆抗体技术因其不断发展的特性而取得了令人…

Java IO流(三)-字节流缓冲流

1字节缓冲区流 1.1 字节缓冲流概述 字节缓冲流&#xff1a; ​ BufferOutputStream&#xff1a;缓冲输出流​ BufferedInputStream&#xff1a;缓冲输入流 构造方法&#xff1a; ​ 字节缓冲输出流&#xff1a;BufferedOutputStream(OutputStream out)​ 字节缓冲输入流&…

Nginx 中 return 和 rewrite 跳转

目录 1.return 跳转 2.rewrite 跳转 如果把https的s去掉&#xff0c;就相当于去访问80端口了&#xff0c;https默认找的是443端口&#xff0c;而80端 口对应的网站我们设置了默认网站&#xff0c;所以如果你删掉了s再访问&#xff0c;就看到我们的默认网站了 我们想要的效果…

LeetCode 1154. 一年中的第几天:2023年最后一道每日一题

【LetMeFly】1154.一年中的第几天&#xff1a;2023年最后一道每日一题 力扣题目链接&#xff1a;https://leetcode.cn/problems/day-of-the-year/ 给你一个字符串 date &#xff0c;按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。 示例 1&…

Python办公自动化 – 定时邮件提醒和音视频文件处理

Python办公自动化 – 定时邮件提醒和音视频文件处理 以下是往期的文章目录&#xff0c;需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自动化…

网工内推 | 事业单位、上市公司网工,五险一金补贴多

01 中科中山药物创新研究院 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1.负责信息化网络数据安全&#xff0c;加固网络安全、渗透测试、风险评估、漏洞扫描、风险管理和风险评估方法。对防火墙、IDS、IPS、蜜罐、防DDOS、VPN等设备的运行管理&#xff1b; 2.负责机…

100个python代码大全详细介绍

1.输出Hello World print("Hello World!")2.计算两个数的和 num1 5 num2 7 sum num1 num2 print("The sum of", num1, "and", num2, "is", sum)3.判断一个数是否是正数 num 10 if num > 0:print("Positive number&quo…

CodeWave智能开发平台--03--目标:应用创建--01模板创建依赖问题修改

摘要 本文是网易数帆CodeWave智能开发平台系列的第03篇&#xff0c;主要介绍了基于CodeWave平台文档的新手入门进行学习&#xff0c;实现一个完整的应用&#xff0c;本文主要完成模板创建时的依赖问题解决。 CodeWave智能开发平台的03次接触 CodeWave参考资源 网易数帆Code…

脚本接收参数,执行shell指令

洗礼 上午开完会&#xff0c;5个小时内丧失思考行动能力&#xff0c;10个小时内不敢说话&#xff0c;深刻把握会议精神&#xff0c;反省自己。因为经常用到脚本执行任务&#xff0c;所以记录一下一些常用的脚本接收参数&#xff0c;执行shell指令。 python脚本 Python脚本是…