8 数据集处理之数据预处理
系列进度
Scikit-learn 入门 · 第 8 / 24 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
预处理规则会影响模型效果,也会影响上线后的稳定性。最重要的是避免先用全量数据处理,再去划分训练测试,这会造成信息泄露。
预处理方法可对照 scikit-learn preprocessing 文档。
我会把缺失值处理、编码和缩放放进 Pipeline,而不是散落在 notebook 的不同单元里。流程清楚,复现实验才可靠。
在数据科学和机器学习的项目中,数据预处理是一个关键的步骤,对模型的性能有着至关重要的影响。在上一篇中,我们讨论了如何加载数据集,现在我们将重点关注如何对数据进行预处理,以确保数据适合模型训练和预测。
1. 什么是数据预处理?
数据预处理是清洗和转化原始数据的过程,使其适合于机器学习模型。这个步骤通常包括:
- 处理缺失值
- 特征编码
- 特征缩放
- 特征选择
2. 处理缺失值
缺失值在数据集中是一个常见的问题,可能会导致模型的性能下降。我们可以使用Scikit-Learn提供的方法处理缺失值。
2.1 删除缺失值
如果缺失值的数量相对较小,可以选择删除包含缺失值的样本。使用pandas的dropna方法可以方便地实现:
import pandas as pd
# 假设我们已加载数据集并命名为df
df_cleaned = df.dropna()
2.2 填充缺失值
对于较大的数据集,删除缺失值可能会导致信息损失,因此可以使用填充的方法。SimpleImputer是Scikit-Learn中用于填充缺失值的类。我们可以选择不同的填充策略,比如均值、中位数或最频繁值。
from sklearn.impute import SimpleImputer
# 创建简单填充器,使用均值填充
imputer = SimpleImputer(strategy='mean')
# 填充缺失值
df[['feature1', 'feature2']] = imputer.fit_transform(df[['feature1', 'feature2']])
3. 特征编码
如果数据集中包含分类特征,模型需要将这些特征转换为数字格式。Scikit-Learn提供了一些工具来实现特征编码。
3.1 独热编码
独热编码(One-Hot Encoding)是转换分类特征的一种常用方法。使用OneHotEncoder可以轻松实现:
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse=False)
encoded_features = encoder.fit_transform(df[['categorical_feature']])
# 将独热编码的特征添加回数据集中
df_encoded = pd.DataFrame(encoded_features, columns=encoder.get_feature_names_out())
df = pd.concat([df.drop('categorical_feature', axis=1), df_encoded], axis=1)
3.2 标签编码
对于有序分类特征,可以使用标签编码(Label Encoding)。可以使用LabelEncoder进行处理:
使用 Scikit-Learn 做数据预处理时,先确认缺失处理、类别编码、数值缩放和训练测试隔离。
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
df['ordinal_feature'] = label_encoder.fit_transform(df['ordinal_feature'])
4. 特征缩放
为了加速模型学习和提高模型的性能,特征缩放是一个必不可少的步骤。在Scikit-Learn中,我们可以使用StandardScaler和MinMaxScaler来进行特征缩放。
4.1 标准化
标准化(Standardization)是将数据转换为均值为0,标准差为1的分布:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['feature1', 'feature2']] = scaler.fit_transform(df[['feature1', 'feature2']])
4.2 归一化
归一化(Normalization)则是将数据缩放到[0, 1]区间:
看《数据集处理之数据预处理》时,先把图中的问题、关键词、操作和验收标准对上,再读正文会更省力。读完后,最好能用自己的项目重新讲一遍。
from sklearn.preprocessing import MinMaxScaler
min_max_scaler = MinMaxScaler()
df[['feature1', 'feature2']] = min_max_scaler.fit_transform(df[['feature1', 'feature2']])
5. 特征选择
特征选择是通过选择最有意义的特征来提高模型性能的方法。Scikit-Learn提供了一些工具来执行特征选择,如SelectKBest。
from sklearn.feature_selection import SelectKBest, f_classif
X = df.drop('target', axis=1)
y = df['target']
# 选择K个最佳特征
selector = SelectKBest(score_func=f_classif, k=10)
X_selected = selector.fit_transform(X, y)
读到这里,可以把《数据集处理之数据预处理》整理成一张复盘表:先说清主线,再拿一个小任务检查结果。
读完《数据集处理之数据预处理》后,可以先挑一个小样例走完整流程,再判断哪些步骤已经能独立完成。
总结
数据预处理是机器学习流程中不可或缺的一部分。在这一部分中,我们介绍了缺失值处理、特征编码、特征缩放和特征选择等重要技术。在进行模型训练之前,确保对数据进行了充分的预处理是至关重要的。
接下来,在我们的系列教程中,我们将讨论如何对数据进行分割,以准备训练和测试模型。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
数据集处理之数据预处理适合谁读?
这是 Scikit-learn 入门 系列第 8 / 24 篇,适合正在学习Scikit-learn 入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇Scikit-learn 入门教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读