当前位置: 首页 > news >正文

机器学习探索性数据分析 (EDA)

机器学习探索性数据分析 (EDA)

探索性数据分析(Exploratory Data Analysis, EDA)是机器学习工作流中至关重要的一个步骤,通过深入分析和理解数据的结构、分布和相关性,EDA帮助揭示数据背后的故事,并为后续的建模提供有力支持。本文将通过具体代码实例和详尽的分析步骤,详细探讨EDA的关键要素和应用。


目录

  1. 📊 了解数据的基本结构:数据维度与基本信息
  2. 🔍 统计特征分析:均值、中位数、分位数等统计量的应用
  3. 📈 数据的分布分析:直方图与核密度估计(KDE)图
  4. 🔗 特征间的相关性分析:散点图与相关矩阵
  5. 🎨 拓展:数据的可视化与特征间关系的深入挖掘

1. 📊 了解数据的基本结构:数据维度与基本信息

在EDA的第一步,了解数据的基本结构是关键。这包括查看数据集的维度、每个特征的类型、缺失值情况以及基本的统计信息。通过这些步骤,可以快速获得数据的总体轮廓,帮助判断数据质量和分布情况。

示例代码:

# 导入必要的库
import pandas as pd# 读取数据集
df = pd.read_csv('your_dataset.csv')# 查看数据集的前几行
print("数据集前5行:\n", df.head())# 查看数据集的维度
print("数据集的维度:", df.shape)# 查看数据集的基本信息,包括每列的数据类型和缺失值
print("数据集的基本信息:")
df.info()# 查看数据集的统计信息
print("数据集的描述统计信息:\n", df.describe())

解释:

  • df.head() 展示数据集的前几行,帮助快速了解每个特征的取值。
  • df.shape 返回数据集的维度,包括行数和列数。
  • df.info() 输出数据集的每一列特征的类型以及缺失值的情况,对于确定哪些列需要进行处理(如填补缺失值)十分有帮助。
  • df.describe() 输出数值型数据的基本统计信息,包括均值、标准差、最小值和最大值等。

通过这些简单的步骤,可以快速掌握数据的整体概况,确定是否需要进一步的数据清理操作。


2. 🔍 统计特征分析:均值、中位数、分位数等统计量的应用

在了解了数据的基本结构之后,接下来可以通过统计特征分析进一步挖掘每个特征的分布特征。均值、中位数、标准差以及分位数等统计量可以帮助理解数据的中心趋势和离散程度,为后续的特征工程提供依据。

示例代码:

# 计算每个特征的均值
mean_values = df.mean()
print("每个特征的均值:\n", mean_values)# 计算每个特征的中位数
median_values = df.median()
print("每个特征的中位数:\n", median_values)# 计算每个特征的分位数
quantiles = df.quantile([0.25, 0.5, 0.75])
print("每个特征的分位数(25%, 50%, 75%):\n", quantiles)# 计算每个特征的标准差
std_values = df.std()
print("每个特征的标准差:\n", std_values)

解释:

  • df.mean() 计算每个数值型特征的均值,帮助理解数据的中心趋势。
  • df.median() 计算中位数,特别适用于非对称分布的数据,能够避免极值对均值的干扰。
  • df.quantile() 计算分位数,进一步揭示数据的分布特征,25%分位数、50%分位数(即中位数)和75%分位数展示了数据的上下四分位区间。
  • df.std() 计算标准差,度量数据的离散程度。标准差较大的特征表示其值的波动较大,反之则较为集中。

这些统计特征帮助判断数据的分布情况,例如是否存在明显的偏态分布、离群值,或者某些特征的离散程度是否异常。根据这些信息,可以对数据进行合理的处理,如去除极值、调整分布等。


3. 📈 数据的分布分析:直方图与核密度估计(KDE)图

在掌握了统计特征之后,数据的分布情况可以通过可视化手段进行直观展示。直方图和核密度估计(KDE)图是常用的两种方法,前者可以展示数据的离散性分布,后者则能够平滑地展示数据的概率密度。

示例代码:

# 导入可视化库
import matplotlib.pyplot as plt
import seaborn as sns# 绘制特征 'Feature1' 的直方图
plt.figure(figsize=(8, 6))
sns.histplot(df['Feature1'], bins=30, kde=False)
plt.title("特征 'Feature1' 的直方图")
plt.xlabel('值')
plt.ylabel('频率')
plt.show()# 绘制特征 'Feature2' 的核密度估计(KDE)图
plt.figure(figsize=(8, 6))
sns.kdeplot(df['Feature2'], shade=True)
plt.title("特征 'Feature2' 的核密度估计图")
plt.xlabel('值')
plt.ylabel('概率密度')
plt.show()

解释:

  • sns.histplot() 绘制直方图,通过设定bins参数控制直方的分箱数,能够直观地展示某个特征的分布频率。
  • sns.kdeplot() 绘制核密度估计图,展示数据的概率密度,能够更平滑地揭示特征的分布趋势。

通过这些可视化图表,可以快速发现数据是否存在偏态分布、是否集中在某个区间,以及是否存在异常值。例如,右偏或左偏的分布可能提示需要对数据进行对数变换或其他处理。


4. 🔗 特征间的相关性分析:散点图与相关矩阵

在数据分析中,不仅需要关注单个特征的分布,还需要理解特征之间的相互关系。特征间的相关性是建模时需要考虑的一个重要因素,相关性过高的特征可能会导致多重共线性,而没有相关性的特征则可能不具备预测能力。通过散点图和相关矩阵,可以有效发现特征间的关系。

示例代码:

# 绘制特征 'Feature1' 和 'Feature2' 之间的散点图
plt.figure(figsize=(8, 6))
sns.scatterplot(x=df['Feature1'], y=df['Feature2'])
plt.title("特征 'Feature1' 和 'Feature2' 之间的散点图")
plt.xlabel('Feature1')
plt.ylabel('Feature2')
plt.show()# 计算相关矩阵
correlation_matrix = df.corr()# 绘制相关矩阵的热力图
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt='.2f')
plt.title("特征间的相关性矩阵热力图")
plt.show()

解释:

  • sns.scatterplot() 用于绘制两个特征之间的散点图,展示它们之间的相互关系。例如,线性关系可能提示它们之间存在一定的相关性。
  • df.corr() 计算数据集中所有特征之间的相关系数矩阵,相关系数的范围是[-1, 1],正值表示正相关,负值表示负相关,值接近0则表示无相关性。
  • sns.heatmap() 用热力图展示相关矩阵,其中annot=True用于显示每个相关系数的具体数值,cmap='coolwarm'用于设置热力图的配色方案。

通过散点图和相关矩阵,可以识别出特征间的强相关性,例如某些高度相关的特征可能是冗余的,可以在建模时进行降维处理(如使用PCA)。而对于相关性较低的特征,则可以考虑是否有必要进行特征工程以增强它们的预测能力。


5. 🎨 拓展:数据的可视化与特征间关系的深入挖掘

在基础的EDA之后,进一步的分析可以通过更多的可视化手段和数据挖掘技巧来实现。例如,成对特征的关系可以通过成对图(

pairplot)来展示,时间序列数据可以绘制趋势图,分类特征可以通过箱线图、条形图等进行分析。通过这些工具,可以更全面地理解数据。

成对图(Pairplot)示例代码:

# 绘制成对特征的关系图(pairplot)
sns.pairplot(df[['Feature1', 'Feature2', 'Feature3']])
plt.show()

时间序列数据分析示例代码:

# 假设 'Date' 是时间序列列,'Sales' 是目标特征
df['Date'] = pd.to_datetime(df['Date'])# 按时间绘制 'Sales' 特征的趋势图
plt.figure(figsize=(10, 6))
plt.plot(df['Date'], df['Sales'], label='Sales over time')
plt.title("时间序列数据趋势图")
plt.xlabel('日期')
plt.ylabel('销售额')
plt.legend()
plt.show()

通过这些深入的分析,可以揭示特征间更为复杂的关系,并为后续的特征工程和模型选择提供有力支持。数据的可视化不仅能够帮助理解特征分布和关系,还能够有效识别数据中的异常模式和特征工程的潜力。


相关文章:

机器学习探索性数据分析 (EDA)

机器学习探索性数据分析 (EDA) 探索性数据分析(Exploratory Data Analysis, EDA)是机器学习工作流中至关重要的一个步骤,通过深入分析和理解数据的结构、分布和相关性,EDA帮助揭示数据背后的故事,并为后续的建模提供有…...

【K8S系列】Kubernetes pod节点Pending或CrashLoopBackOff 问题及解决方案详解【已解决】

在 Kubernetes 中,Pod 是最小的可调度单元,负责运行容器。当 Pod 的状态显示为 Pending 或 CrashLoopBackOff 时,意味着它无法成功启动或持续崩溃。本文将详细分析这两种状态的原因、排查步骤、执行后的结果及相应的解决方案。 一、Pod 状态概…...

【Redis】Zset类型常用命令

文章目录 一. Zset有序集合简介.二. 添加元素相关命令.2.1 向有序集合中添加元素(zadd) 三. 查询元素相关操作.3.1 查询有序集合中的元素个数( zcard zcount)3.2 查询指定区间内的元素(zrange zrevrange zrangebyscore)3.3 查询有序集合中指定成员的排名(zrank zrevrank )3.4 查…...

js中map,filter,find,foreach的用法介绍

js中map,filter,find,foreach的用法介绍 在 JavaScript 中,数组提供了一些常用的迭代方法,如 map、filter、find 和 forEach,这些方法允许你对数组中的每个元素进行操作,下面是它们的用法和区别…...

Linux 重置 root 密码

如果您在Linux系统中忘记了root密码,可以按照以下步骤重置: 重启系统。在启动时,当GRUB菜单出现时,选择要启动的内核版本,然后按 e 键编辑启动选项。找到以linux或linux16开头的行,它包含了启动内核的命令…...

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的停车场管理系统

开题报告 随着城市化进程不断加快,汽车保有量持续增长,城市停车问题日益凸显,传统停车场管理手段面临着诸多挑战,诸如管理效率低、人工成本高、信息更新滞后、收费不透明等问题。鉴于此,基于 Web 的智能停车场管理系统…...

博睿数据首届“观测先锋 · 2024 可观测平台创新应用案例大赛”现已启动!

大赛报名火热进行中! 在当今这个数字化、智能化的时代,可观测性技术已经成为企业IT架构中不可或缺的一部分。它能够帮助企业实时监控系统的运行状态,及时发现并解决潜在问题,从而确保业务的稳定性和连续性。博睿数据一体化智能可观…...

笔记:SOME/IP-SD报文中的TTL

问:SOME/IP-SD报文中有几个参数名字都叫的TTL,请问它们有什么不同? 答:在SOME/IP Service Discovery (SOME/IP-SD)协议中,确实有多个与TTL(Time-To-Live)相关的参数,但它们的含义不…...

9.存储过程安全性博客大纲(9/10)

存储过程安全性博客大纲 引言 在数据库系统中,存储过程是一种预先编写好的SQL代码集合,它被保存在数据库服务器上,可以通过指定的名称来调用执行。存储过程可以包含一系列的控制流语句,如IF条件语句、WHILE循环等,使…...

android 打包成aar

1 先建立的空白新工程(不能有activity,直接建立No Activity的项目就行) 2 建立新library 3 填写自己的内容 4 5 如果代码有红色提示的错误,会提示打包失败,修改红色的错误提示就行...

服务器和中转机在网络安全方面

服务器和中转机(代理服务器)在网络安全方面扮演着不同的角色,各自承担着保护网络资源和控制网络访问的重要职责。 它们在网络安全方面的主要作用: 服务器在网络安全中的角色 1.服务保护: 服务器通常运行着各种网络…...

解决“无法从 System.String 强制转换或转换为 Class 对象”错误

解决“无法从 System.String 强制转换或转换为 Class 对象”错误 在进行 API 自动化时,我必须反序列化响应以解析 API 响应数据。我们使用 Newtonsoft.Json NuGet 来实现这一点。 我在反序列化过程中遇到以下错误 - Newtonsoft.Json.JsonSerializationExceptionH…...

Git:LF will be replaced by CRLF、pytest PermissionError以及Git应用中的一些问题解决及一些使用技巧

一、Git:LF will be replaced by CRLF和pytest: --cov NTERNALERROR PermissionError 1. git warning: LF will be replaced by CRLF in ***file 偶然git add在进行代码提交的时候碰到警告warning: LF will be replaced by CRLF in ***file,原因是编辑的代码内容中…...

云原生之运维监控实践-使用taosKeeper与TDinsight实现对TDengine服务的监测告警

背景 如果没有监控,那么最好的情况是没有问题发生,最糟糕的情况则是问题发生了但没有被发现。——《Prometheus监控实战》 在10月10日收到了 TDengine 官方微信公众号的一条推送,摘要如下: 今天(2024年10月10日)我们非常高兴地宣布…...

前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信

前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信 1,父子系统之间的通信问题 父系统给子系统传值可通过postMessage方式进行通信,postMessage(“传递的数据”,url) 1.1 父系统给子系统的传值 let iframe document.getElementById(childFrame); let o1 {…...

树莓派刷入OpenWrt后扩容overlay的方法

问题: 128G的SD卡刷入openwrt后发现可用空间不足100M(我用的squashfs固件,ext4也存在同样的问题,但能否用此方法需要自己尝试一下)。 rootOpenWrt:~# df -h Filesystem Size Used Available Use%…...

【JS】Node.js读取execle表格中的数据

在Node.js中读取.xlsx格式的Excel文件,可以使用xlsx库。这个库非常流行且易于使用。下面是一个基本示例,展示如何使用xlsx库读取.xlsx文件中的数据。 首先,你需要安装xlsx库。你可以使用npm来安装: npm install xlsx然后&#x…...

怎么为pdf文件设置密码?几种PDF文件设置密码的方法推荐

怎么为pdf文件设置密码?设置PDF文件密码,正是应对这一挑战的有效手段之一。通过为PDF文件设置密码,我们能够为文档加上一道安全锁,确保只有掌握密码的用户才能打开和查看文件内容。这一措施不仅保护了文档的隐私性,还防…...

Rust : FnOnce、线程池与多策略执行

一、问题&#xff1a;mpsc如何发送各类不同的函数&#xff1f; 3个关键词&#xff1a;闭包、Box与FnOnce&#xff1b;请细品。 use std::sync::{mpsc,Arc,Mutex}; use std::thread; fn process<F>(old:f32,name:String,f:F) where F: FnOnce(f32,String) {f(old,name);…...

一个汉字占几个字节、JS中如何获得一个字符串占用多少字节?

浅浅记录 一个汉字占几个字节&#xff1f;JS中如何获得一个字符串占用多少字节&#xff1f; 一个汉字占几个字节&#xff1f; GBK编码&#xff1a;一个汉字、中文字符都是占2个字节&#xff0c;英文字符占1个字节 UTF-8编码&#xff1a;一个汉字、中文字符都是占3个字节&#…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...