手把手教你数据清洗:Hands-on ML3项目中的5大实用技巧

手把手教你数据清洗:Hands-on ML3项目中的5大实用技巧

【免费下载链接】handson-ml3 A series of Jupyter notebooks that walk you through the fundamentals of Machine Learning and Deep Learning in Python using Scikit-Learn, Keras and TensorFlow 2. 【免费下载链接】handson-ml3 项目地址: https://gitcode.com/gh_mirrors/ha/handson-ml3

数据清洗是机器学习项目成功的关键第一步!在Aurélien Géron的《Hands-on Machine Learning with Scikit-Learn, Keras and TensorFlow》第三版(Hands-on ML3)项目中,数据清洗被赋予了重要地位。本文将带你深入了解这个开源机器学习教程中的数据清洗核心技巧,让你快速掌握数据预处理的关键技能。

📊 为什么数据清洗如此重要?

在机器学习项目中,数据清洗占据了整个流程的60-80%的时间。Hands-on ML3项目通过加州房价预测的实际案例,展示了脏数据如何影响模型性能。项目中的02_end_to_end_machine_learning_project.ipynb文件详细记录了从原始数据到可用数据的完整转换过程。

数据清洗流程

图:数据清洗就像整理花园,需要耐心和技巧

🔍 第一步:探索性数据分析(EDA)

在Hands-on ML3项目中,作者首先使用Pandas的.info().describe()方法快速了解数据:

housing.info()  # 查看数据类型和缺失值
housing.describe()  # 获取统计摘要

关键发现:

  • total_bedrooms列有207个缺失值
  • ocean_proximity是分类变量
  • 特征值范围差异巨大(需要标准化)

🧹 5大数据清洗实用技巧

1. 处理缺失值的3种策略

Hands-on ML3展示了多种处理缺失值的方法:

# 方法1:删除包含缺失值的行
housing.dropna(subset=["total_bedrooms"])

# 方法2:删除整个特征列
housing.drop("total_bedrooms", axis=1)

# 方法3:填充缺失值(中位数)
median = housing["total_bedrooms"].median()
housing["total_bedrooms"].fillna(median, inplace=True)

2. 文本特征编码技巧

分类变量ocean_proximity需要转换为数值:

from sklearn.preprocessing import OrdinalEncoder
ordinal_encoder = OrdinalEncoder()
housing_cat_encoded = ordinal_encoder.fit_transform(housing_cat)

3. 特征缩放与标准化

不同尺度的特征会影响模型性能:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
housing_scaled = scaler.fit_transform(housing_num)

4. 创建新特征提升模型性能

通过组合现有特征创建更有意义的特征:

housing["rooms_per_household"] = housing["total_rooms"] / housing["households"]
housing["bedrooms_per_room"] = housing["total_bedrooms"] / housing["total_rooms"]
housing["population_per_household"] = housing["population"] / housing["households"]

5. 处理异常值的智能方法

神经网络架构

图:深度神经网络对数据质量非常敏感

🛠️ Hands-on ML3的数据清洗工具包

Pandas基础操作

项目中的tools_pandas.ipynb文件提供了全面的Pandas教程,包括:

  • 数据筛选和排序
  • 分组聚合操作
  • 数据合并与连接
  • 时间序列处理

Scikit-Learn预处理模块

第13章专门讲解tf.data API,涵盖了:

  • 数据管道构建
  • 批处理和混洗
  • 并行数据加载
  • 实时数据增强

📈 数据清洗的最佳实践

创建可复用的数据管道

Hands-on ML3强调创建可复用的数据预处理管道:

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler

num_pipeline = Pipeline([
    ('imputer', SimpleImputer(strategy="median")),
    ('std_scaler', StandardScaler()),
])

验证数据清洗效果

清洗后的数据应该:

  1. ✅ 没有缺失值
  2. ✅ 特征尺度一致
  3. ✅ 异常值得到处理
  4. ✅ 分类变量正确编码
  5. ✅ 新特征有意义

🚀 从理论到实践:加州房价案例

Hands-on ML3项目的加州房价数据集完美展示了数据清洗的完整流程:

  1. 数据加载:从CSV文件读取原始数据
  2. 初步探索:了解数据结构和问题
  3. 数据分割:划分训练集和测试集
  4. 深度清洗:处理缺失值、异常值
  5. 特征工程:创建更有预测力的特征
  6. 数据转换:标准化和编码

神经网络训练

图:清洗后的数据让模型训练更加高效

💡 数据清洗的常见陷阱与解决方案

陷阱1:数据泄露

错误做法:在整个数据集上计算统计量后再分割 ✅ 正确做法:只在训练集上计算统计量,然后应用到测试集

陷阱2:过度清洗

删除太多"异常"数据点理解业务背景,区分真正的异常和重要信息

陷阱3:忽略类别不平衡

直接使用原始分布使用过采样、欠采样或类别权重

📚 深入学习资源

Hands-on ML3项目提供了丰富的学习材料:

🎯 总结:数据清洗的艺术

数据清洗不是一次性任务,而是迭代的过程。Hands-on ML3项目教会我们:

🔸 理解业务需求是数据清洗的第一步 🔸 自动化清洗流程可以提高效率 🔸 文档化每一步操作确保可复现性 🔸 验证清洗效果通过模型性能评估

记住:垃圾进,垃圾出(Garbage In, Garbage Out)。高质量的数据清洗能为后续的模型训练打下坚实基础,是机器学习项目成功的关键!

💡 小贴士:在实际项目中,建议将数据清洗代码模块化,创建可配置的数据预处理类,方便在不同项目中复用。

通过Hands-on ML3项目的学习,你将掌握专业的数据清洗技能,为构建高性能机器学习模型奠定坚实基础。现在就开始你的数据清洗之旅吧! 🚀

【免费下载链接】handson-ml3 A series of Jupyter notebooks that walk you through the fundamentals of Machine Learning and Deep Learning in Python using Scikit-Learn, Keras and TensorFlow 2. 【免费下载链接】handson-ml3 项目地址: https://gitcode.com/gh_mirrors/ha/handson-ml3

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值