机器学习探索性数据分析 (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()

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


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

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

相关文章

KMP 算法

目录 KMP 算法 算法思路 为什么不需要在主串中进行回退 计算 next 数组 代码实现 next 数组优化 查找所有起始位置 KMP 算法 KMP 算法是一种改进的字符串匹配算法,由 D.E.Knuth,J.H.Morris 和 V.R.Pratt 提出的,因此人们称它为 克努特…

【ODSS】An Open Dataset of Synthetic Speech

文章目录 An Open Dataset of Synthetic Speechkey pointsODSS数据集局限性An Open Dataset of Synthetic Speech 会议/期刊:WIFS 2023 作者: key points 一个由合成语音和自然语音组成的多语言、多说话人数据集ODSS,旨在促进合成语音检测的研究和基准测试。 是由156个声…

Android compose 重建流程1

前言 本文是笔者学习Compose是如何自动触发UI刷新的笔记,可能缺乏一定可读性和教导性.(建议阅读参考文献更具启发性) 使用以下BOM作为研究环境. composeBom "2024.04.01" androidx-compose-bom { group "androidx.compose", name "compose-bom…

HarmonyOS Next应用开发——图像PixelMap压缩保存

【高心星出品】 图片编码保存 图片编码指将PixelMap编码成不同格式的存档图片,当前支持打包为JPEG、WebP、png和 HEIF(不同硬件设备支持情况不同) 格式,用于后续处理,如保存、传输等。图片编码是图片解码-图片处理-图片保存的最后环节&…

C#中的接口的使用

定义接口 public interface IMyInterface {int MyProperty { get; set; }void MyMethod(); } 实现类 internal class MyClass : IMyInterface {public int MyProperty { get; set; }public void MyMethod(){Console.WriteLine("MyMethod is called");} } 目录结构…

负载箱的作用?

负载箱,顾名思义,就是用来承载电力设备的箱子。在电力系统中,负载箱的作用非常重要,它不仅可以模拟实际的电力负载,还可以对电力设备进行测试和调试,确保其正常运行。下面详细介绍负载箱的作用。 1. 模拟实…

深入了解Spring重试组件spring-retry

在我们的项目中,为了提高程序的健壮性,很多时候都需要有重试机制进行兜底,最多就场景就比如调用远程的服务,调用中间件服务等,因为网络是不稳定的,所以在进行远程调用的时候偶尔会产生超时的异常&#xff0…

这几次比赛题解

因为考虑到再看&#xff0c;所以将所有题目都做成了pdf格式 梦熊十三连测 T1 这道题其实什么也不用想&#xff0c;就按照题目给的意思来打代码就行&#xff0c;这就有40分可以拿。懒人做法 #include<bits/stdc.h> using namespace std; typedef long long ll; ll read…

MP9928模块分析

MP9928 是一款高性能的同步降压 DC/DC 转换器控制器 IC&#xff0c;具有宽输入范围。以下是其操作和关键特性的总结&#xff1a; 概述 电流模式控制&#xff1a;MP9928 使用电流模式、可编程开关频率控制架构&#xff0c;通过外部 N 沟道 MOSFET 开关来调节输出电压。 反馈和…

Golang | Leetcode Golang题解之第500题键盘行

题目&#xff1a; 题解&#xff1a; func findWords(words []string) (ans []string) {const rowIdx "12210111011122000010020202" next:for _, word : range words {idx : rowIdx[unicode.ToLower(rune(word[0]))-a]for _, ch : range word[1:] {if rowIdx[unico…

【uni-app学习-2】

一、跳转 方法&#xff1a;在methods中去定义方法&#xff1a; 上述为直接跳转&#xff0c;但是当你要跳转页面是由多个可切换页面组成比如&#xff1a; 这个页面其实是由两个页面组成&#xff0c;一个主页&#xff0c;一个我的&#xff0c;两个页面 路由配置需要用到toob…

房屋租赁网站毕业设计基于SpringBootSSM框架的计算机毕业设计

计算机毕业设计/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 目录 一、项目背景与目的‌ ‌二、系统需求分析‌ 2.1功能需求 2.2 技术需求 2.3 可执行性 ‌三、系统设计与实现‌ ‌3.1系统架构设计‌&#xff1a; ‌3.2功能模块开发‌&#xff1a; ‌3.3…

golang生成并分析cpu prof文件

1. 定义一个接口&#xff0c;请求接口时&#xff0c;生成cpu.prof文件 在主协程中新启一个协程&#xff0c;当请求接口时&#xff0c;生成一个60秒的cpu.prof文件 go func() {http.HandleFunc("/prof", startProfileHandler)http.ListenAndServe(":9092"…

Spring Boot助力:构建响应式论坛网站

3系统分析 3.1可行性分析 通过对本论坛网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本论坛网站采用SSM框架&#xff0c;JAVA作为开发语言&#xff0c;是…

华为云CodeArts Pipeline架构与内容双重优化,高效助力持续交付!

点击下方链接进入帮助中心 成长地图_流水线 CodeArts Pipeline_华为云

unity学习-全局光照(GI)

在全局光照&#xff08;Lighting&#xff09;界面有两个选项 Realtime Light&#xff08;实时光照&#xff09;&#xff1a;在项目中会提前计算好光照以及阴影的程序&#xff0c;当你需要调用实时全局光照的时候会将程序调用出来使用 Mixed Light&#xff08;烘焙光照&#x…

HBuilder X 中Vue.js基础使用1(三)

一、 模板语法 Vue 使用一种基于 HTML 的模板语法&#xff0c;使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML&#xff0c;可以被符合规范的浏览器和 HTML 解析器解析。 英文官网: Vue.js - The Progressive JavaScript Fr…

DPRNN 学习

DPRNN介绍 双路径循环语音分离神经网络&#xff08;Dual-Path RNN&#xff09;由三个处理阶段组成, 编码器、分离和解码器。首先&#xff0c;编码器模块用于将混合波形的短段转换为它们在中间特征空间中的对应表示。然后&#xff0c;该表示用于在每个时间步估计每个源的乘法函…

HCIP-HarmonyOS Application Developer 习题(十四)

&#xff08;多选&#xff09;1、HarmonyOs为应用提供丰富的Al(Artificial Intelligence)能力&#xff0c;支持开箱即用。下列哪些是它拥有的AI能力? A、通用文字识别 B、词性标注 C、实体识别 D、语音播报 答案&#xff1a;ABCD 分析&#xff1a; AI能力简介二维码生成根据开…

(JAVA)贪心算法、加权有向图与求得最短路径的基本论述与实现

1. 贪心算法 1.1 贪心算法的概述&#xff1a; 贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。 贪心算法的特点是一步一步地进行&#xff0c;常以当前情况为基础根据某个优化测度作最优选择&#xff0c;而不考虑各种可能的整体情况&#xff0c;省去了为找最优…