探索性数据分析

端到端机器学习

Joshua Stapleton

Machine Learning Engineer

EDA 流程

  • 检查并分析数据集
  • 理解数据集
  • 可视化数据集
  • 描述/分类数据集

一个图示,展示 EDA 在心脏病患者数据集上的各组成部分

端到端机器学习

理解我们的数据

df.head()

  • 显示数据集前几行
  • 提供数据结构快照
# 打印前 5 行
print(heart_disease_df.head())

心脏病数据框的前 5 行。调用 df.head() 的结果。

df.info()

  • 汇总特征
  • 显示非空条目数和类型
# 打印详情
print(heart_disease_df.info())

心脏病数据框的汇总信息。调用 df.info() 的结果。

端到端机器学习

类别(不)平衡

df.value_counts()

  • 统计各类的唯一出现次数
  • 类别:心脏病是否存在(二元 1/0)
  • 对建模很重要
# 打印类别分布
print(heart_disease_df['target'].value_counts(normalize=True))

心脏病数据框 target 列的类别分布。对该列调用 .value_counts() 的结果。

端到端机器学习

缺失值

  • 可能导致错误
  • 结果不具代表性、偏差大

使用 df.isnull()

  • 检查空/空白/缺失值
  • 可用于单列或多列

用法

# 检查一列是否全为缺失
print(heart_disease_df['oldpeak'].isnull().all())
True
端到端机器学习

离群点

  • 异常值

    • 测量误差
    • 数据录入错误
    • 罕见事件
  • 可能扭曲模型表现

    • 模型受极端值影响
    • 无法反映总体趋势
  • 有时也有用:

    • 罕见值
    • 检测:箱线图或 IQR

展示离群点的可视化。

端到端机器学习

可视化我们的数据

可视化可揭示:

  • 总体趋势
  • 缺失值与离群点

其他可视化类型:

  • 核密度估计
  • 经验累积分布
  • 二元分布
df['age'].plot(kind='hist')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.show()

展示数据集中年龄分布的可视化。

1 https://seaborn.pydata.org/tutorial/distributions.html, https://app.datacamp.com/learn/courses/intermediate-data-visualization-with-seaborn
端到端机器学习

EDA 目标

理解数据

  • 是否存在模式?
  • 例:男性心脏病率更高吗?

检测离群点

  • 是否有超出可接受范围的数据?
  • 是否有错误或缺失值?

提出假设

  • 我们应从数据中看到什么?

检验假设

  • 预期是否符合现实?
端到端机器学习

Passons à la pratique !

端到端机器学习

Preparing Video For Download...