20.使用标准差剔除异常值

标准差剔除异常值

  • 1. 方法
  • 2. 示例代码
    • 2.1 数据读取与清洗
    • 2.2 分段读取数据并绘图
    • 2.3 解释
    • 2.4 `outliers`
    • 2.5 结果展示

我有个记录数据采集后格式是step_rewards.txt 的文档,里面只有一列数据,10*10000行数据,没有表头,分别代表奖励数值。因为有些数据点峰值 和 峰谷很高,抖动大。现在需要在分10段,每段10000条数据。读取原始数据之后,在画折线图前,这中间增加一个对原始数据过滤的功能,将过滤后的数据保存到一个新的文件中,filter_step_rewards.txt

要求:这个区间里的数据,把抖动很大的数据,给过滤到剔除掉,不再使用这种抖动大的数据,然后用新过滤后的数据,再画图。

1. 方法

在绘制图表之前对数据进行预处理,剔除掉那些波动很大的数据点。我们可以使用一些统计方法来识别和剔除这些异常值。常用的方法包括使用标准差(Standard Deviation)或四分位数(Interquartile Range, IQR)来检测和剔除异常值。

2. 示例代码

下面是一个完整的示例代码,展示了如何读取数据、进行数据清洗、分段读取数据并绘图。
使用标准差方法剔除异常值。

2.1 数据读取与清洗

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os# 读取数据
file_path = 'step_rewards.txt'
data = pd.read_csv(file_path, header=None, names=['reward'])# 检查数据结构
print(data.head())# 数据清洗 - 使用标准差方法剔除异常值
def remove_outliers(df, column, threshold=3):mean = df[column].mean()std = df[column].std()outliers = (df[column] - mean).abs() > threshold * stdreturn df[~outliers]# 清洗数据
cleaned_data = remove_outliers(data, 'reward')# 打印前几行查看清洗后的数据
print(cleaned_data.head())

2.2 分段读取数据并绘图

# 将清洗后的数据保存到新的文件中
output_file_path = 'filter_step_rewards.txt'
cleaned_data.to_csv(output_file_path, index=False, header=False)
print(f"Filtered data saved to {output_file_path}")# 确保输出目录存在
output_dir = 'plots'
os.makedirs(output_dir, exist_ok=True)# 每隔 10000 行提取数据
chunk_size = 10000
num_chunks = len(cleaned_data) // chunk_sizefor i in range(num_chunks):start_idx = i * chunk_sizeend_idx = (i + 1) * chunk_sizechunk = cleaned_data.iloc[start_idx:end_idx]# 绘制清洗后的数据plt.figure(figsize=(10, 6))plt.plot(chunk.index, chunk['reward'], label='Cleaned Reward')plt.legend()plt.title(f'Rewards for Chunk {i+1}')plt.xlabel('Step')plt.ylabel('Reward')# 保存图像image_path = os.path.join(output_dir, f'reward_chunk_{i+1}.png')plt.savefig(image_path)plt.close()print(f"Generated {num_chunks} plots and saved them in {output_dir}")

2.3 解释

1 ) 数据读取

data = pd.read_csv(file_path, header=None, names=['reward'])

这行代码读取 step_rewards.txt 文件,文件没有标题行。我们将列名指定为 reward

2 ) 数据检查

print(data.head())

打印数据的前几行,以便确认数据是否正确加载。

3 ) 数据清洗

def remove_outliers(df, column, threshold=3):mean = df[column].mean()std = df[column].std()outliers = (df[column] - mean).abs() > threshold * stdreturn df[~outliers]
  • remove_outliers 函数用于剔除异常值。它计算数据的均值和标准差,然后将距离均值超过 threshold 倍标准差的数据点标记为异常值。
  • threshold 参数默认为3,表示剔除距离均值超过3倍标准差的数据点。可以根据实际情况调整这个阈值。
cleaned_data = remove_outliers(data, 'reward')

调用 remove_outliers 函数对数据进行清洗。

4 ) 保存清洗后的数据:

output_file_path = 'filter_step_rewards.txt'
cleaned_data.to_csv(output_file_path, index=False, header=False)
print(f"Filtered data saved to {output_file_path}")
  • 将清洗后的数据保存到 filter_step_rewards.txt 文件中。
  • index=False 表示不保存索引。
  • header=False 表示不保存列名。

5 ) 分段读取数据并绘图

chunk_size = 10000
num_chunks = len(cleaned_data) // chunk_sizefor i in range(num_chunks):start_idx = i * chunk_sizeend_idx = (i + 1) * chunk_sizechunk = cleaned_data.iloc[start_idx:end_idx]plt.figure(figsize=(10, 6))plt.plot(chunk.index, chunk['reward'], label='Cleaned Reward')plt.legend()plt.title(f'Rewards for Chunk {i+1}')plt.xlabel('Step')plt.ylabel('Reward')image_path = os.path.join(output_dir, f'reward_chunk_{i+1}.png')plt.savefig(image_path)plt.close()
  • chunk_size 定义了每组数据的大小。
  • num_chunks 计算总共有多少组数据。
  • for 循环遍历每组数据,提取并绘制清洗后的数据。
  • plt.savefig(image_path) 将图像保存到指定路径。
  • plt.close() 关闭当前图像,防止内存泄漏。

6 ) 输出信息

print(f"Generated {num_chunks} plots and saved them in {output_dir}")

输出生成的图像数量和保存路径。

运行上述代码后,将在 plots 目录中找到 10 张图像文件,每张图像对应一组数据的清洗后奖励值的图表。

在这里插入图片描述

2.4 outliers

1 )在 remove_outliers 函数中,我们定义了一个布尔 Series outliers,用于标识哪些数据点是异常值。

outliers = (df[column] - mean).abs() > threshold * std
  • (df[column] - mean).abs():计算每个数据点与均值的绝对差值。
  • > threshold * std:判断绝对差值是否大于 threshold 倍的标准差。
  • 结果是一个布尔 Series,其中 True 表示该数据点是异常值,False 表示该数据点不是异常值。

2 ) ~outliers
在 Python 中,~ 是按位取反运算符。对于布尔值,~TrueFalse~FalseTrue。因此,~outliers 会将布尔 Series outliers 中的 True 变为 FalseFalse 变为 True

3 ) df[~outliers]
df[~outliers] 是 Pandas 中的一种索引操作,用于从 DataFrame 中选择符合条件的行。具体来说:

  • df[~outliers] 会选择 outliers 中为 False 的行,即非异常值的行。
  • 结果是一个新的 DataFrame,其中不包含任何异常值。

2.5 结果展示

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

中科蓝讯修改蓝牙名字:【图文讲解】

本文以市面上一款公板公模的畅销产品为例。K12蓝牙音响。 音响用的芯片是:AB5768E MIC用的芯片是:AB5769A 硬件框架图如下: 芯片修改名字,通过下载工具中的配置进行修改。选择蓝牙配置,然后会出现蓝牙名字&#xff…

旅行包发霉怎么处理 除霉及防霉解决方法

近些年听到很多箱包工厂的心声,为什么箱包旅行包每年都会出现长霉请况呢?长霉了,也就是长毛了,长出那些病菌、真菌、细菌等微生物。经ihaoer防霉人士介绍旅行包长霉处理方法如下: 旅行包长霉的因素 一、旅行包储存在阴…

14、交互补充

1、元素的三大系列 1.1、offset系列 1.1.1、offset初相识 使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等 获得元素距离带有定位祖先元素的位置获得元素自身的大小(宽度高度)注意:返回的数值都不…

【IEEE出版、八大高校联合举办、稳定EI检索】第四届人工智能与智能制造国际研讨会(AIIM 2024,12月20-22日)

第四届人工智能与智能制造国际研讨会(AIIM 2024) The 4th International Symposium on Artificial Intelligence and Intelligent Manufacturing 2024年12月20-22日 中国成都 重要信息 大会官网:www.isaiim.com 大会时间:202…

朴素贝叶斯算法探讨与实践

引言 和撰写博文[1]的缘由一样,本文是想要在所创设的专栏[2]里把所谓的十大机器学习算法[3]全部过一遍。 朴素贝叶斯算法是传统机器学习里的一种可以被用来进行分类的算法,本文将对其原理进行说明,并基于原理给出一个基于该算法的分类实践。…

《数据在内存中的存储》

内存函数 1. 整数在内存中的存储 (1)旧识回顾: 之前在学到操作符的时候,我们就学过了下面的内容: 整数的二进制的表示方式有三种,原码、反码、补码 有符号的整数,三种表示方式均有符号位和数…

【路径规划】粒子群算法、遗传算法、差分进化算法、灰狼优化算法、麻雀优化算法(PSO、GA、DE、GWO、SSA)路径规划

摘要 本文探讨了多种智能优化算法在路径规划中的应用,包括粒子群算法(PSO)、遗传算法(GA)、差分进化算法(DE)、灰狼优化算法(GWO)和麻雀优化算法(SSA&#x…

CSS基础知识05(弹性盒子、布局详解,动画,3D转换,calc)

目录 0、弹性盒子、布局 0.1.弹性盒子的基本概念 0.2.弹性盒子的主轴和交叉轴 0.3.弹性盒子的属性 flex-direction row row-reverse column column-reverse flex-wrap nowrap wrap wrap-reverse flex-dirction和flex-wrap的组合简写模式 justify-content flex-s…

如何搭建一台邮箱服务器,配置满分邮箱

如何搭建一台邮箱服务器,配置满分邮箱 搭建一台个人邮箱服务器听上去非常有技术含量,但只要准备工作充分,并且选择合适的软件,配置满分的邮箱,其实并没有想象中那么困难。在这篇文章中,我们将介绍搭建邮箱服务器的 必备…

DevOps工程技术价值流:打造卓越项目协作的优化宝典

一、引言 解锁项目协作的无限潜力,覆盖全链路实现流畅高效。 在当今瞬息万变的商业环境中,项目协作的效率和效果直接关系到企业的竞争力和市场响应速度。DevOps工程技术价值流中的项目协作优化,不仅是技术层面的革新,更是团队协…

【JAVA毕业设计】基于Vue和SpringBoot的冬奥会科普平台

本文项目编号 T 610 ,文末自助获取源码 \color{red}{T610,文末自助获取源码} T610,文末自助获取源码 目录 一、系统介绍二、数据库设计三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状 六、核心代码6.1 查询项目类型6.…

基于的图的异常检测算法OddBall

OddBall异常检测算法出自2010年的论文《OddBall: Spotting Anomalies in Weighted Graphs》,它是一个在加权图(weighted graph)上检测异常点的算法,基本思路为计算每一个点的一度邻域特征,然后在整个图上用这些特征拟合出一个函数&#xff0c…

网络工程师教程第6版(2024年最新版)

网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。 相关信息: 出版社: 清华大学出版社 ISBN:9787302669197 内容简介: 本书是工业和信息化部教育与考试中心组织编写的考试用书。本书 根据…

算法复杂度——大O表示法

参考视频:常见的大O表示法有哪些?时间复杂度是什么?_哔哩哔哩_bilibili

Maven maven项目构建的生命周期 Maven安装配置 IDEA 配置 Maven

一,Maven的概述 Maven的作用:专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构提供了一套标准化的构建流程(编译,测试,打包,发布……)提…

排序算法(基础)大全

一、排序算法的作用: 排序算法的主要作用是将一组数据按照特定的顺序进行排列,使得数据更加有序和有组织。 1. 查找效率:通过将数据进行排序,可以提高查找算法的效率。在有序的数据中,可以使用更加高效的查找算法&…

GraphLLM:基于图的框架,通过大型语言模型处理数据

GraphLLM是一个创新的框架,它允许用户通过一个或多个大型语言模型(LLM)来处理数据。这个框架不仅提供了一个强大的代理,能够执行网络搜索和运行Python代码,还提供了一套工具来抓取网页数据,并将其重新格式化…

TransFormer--解码器:概括

TransFormer--解码器:概括 假设我们想把英语句子I am good(原句)翻译成法语句子Je vais bien(目标句)。首先,将原句I am good送入编码器,使编码器 学习原句,并计算特征值。在前文中&…

3D Gaussian Splatting 代码层理解之Part1

2023 年初,来自法国蔚蓝海岸大学和 德国马克斯普朗克学会的作者发表了一篇题为“用于实时现场渲染的 3D 高斯泼溅”的论文。该论文提出了实时神经渲染的重大进步,超越了NeRF等以往方法的实用性。高斯泼溅不仅减少了延迟,而且达到或超过了 NeRF 的渲染质量,在神经渲染领域掀…

K8s学习笔记之了解k8s的网络模型

文章目录 docker 网络模型容器与容器之间,容器与宿主机之间如何通信容器访问外部网络外部网络访问容器 k8s 网络模型CNIpod 网络配置流程 k8s 热门网络插件介绍Flannel 来源Calico 来源Cilium 来源 k8s 网络插件的工作模式Flannel 的工作模式Calico 的工作模式BGP 和…