机器学习入门文档深度页
缺失值处理
根据特征类型、缺失机制和业务语义,在训练集内学习填补规则并保留必要的缺失信息。
学习前需要掌握
训练/测试边界内容待补充数值与类别数据内容待补充
背景与问题
直接删除缺失样本会减少数据并可能改变分布。均值对极端值敏感,中位数通常更稳健。某些缺失不是随机的,例如“未填写收入”可能本身与目标相关。
概念定义
缺失值处理是把不可直接供模型使用的空值转换为一致输入,同时尽量保留“为什么缺失”这一可能有用的信息。
数值列可用中位数、均值或业务规则填补;类别列可用众数或专门的“缺失”类别。
直观理解
填补不是猜出真实值,而是为模型建立一致的缺失处理约定;必要时再增加一列告诉模型“这里原本缺失”。
核心原理
填补统计量与标准化参数一样,只能由训练数据学习。交叉验证中应放在 Pipeline 内。选择策略需要结合缺失比例、分布、模型能力与业务含义。
计算与实现步骤
- 1
统计每列缺失比例。
- 2
区分数值、类别和结构性缺失。
- 3
判断缺失是否可能携带信息。
- 4
在训练集拟合填补器。
- 5
对其他分块只 transform。
- 6
比较不同策略并检查填补后的分布。
代码实现
示例 1
数值与类别列分别填补
数值与类别列分别填补
scikit-learn
example_01.py用途:使用 ColumnTransformer 为不同类型列建立独立规则。
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
preprocessor = ColumnTransformer([
("num", SimpleImputer(strategy="median", add_indicator=True), numeric_columns),
("cat", SimpleImputer(strategy="most_frequent"), categorical_columns),
])
X_train_ready = preprocessor.fit_transform(X_train)
X_test_ready = preprocessor.transform(X_test)代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
使用 ColumnTransformer 为不同类型列建立独立规则。
X_train- 训练特征,只允许它参与预处理器和模型的 fit。
X_test- 测试特征,只用于最终 transform、predict 和评价。
Step 1 · 1–2 行
导入当前步骤需要的数值计算、预处理、模型或评价工具。依赖集中写在代码开头,便于复现。
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputerStep 2 · 4–9 行
调用 fit 学习训练数据中的参数;若在 Pipeline 中,预处理器与模型会按顺序拟合。
preprocessor = ColumnTransformer([
("num", SimpleImputer(strategy="median", add_indicator=True), numeric_columns),
("cat", SimpleImputer(strategy="most_frequent"), categorical_columns),
])
X_train_ready = preprocessor.fit_transform(X_train)
X_test_ready = preprocessor.transform(X_test)预期输出或运行结果
得到无缺失的数值矩阵;若训练列出现缺失,附加相应缺失指示列。
常见错误 · 4 条
- 用完整数据算填补值
- 把未知类别和缺失混为一谈
- 不分析高缺失比例特征的业务含义
- 确认样本轴、特征轴以及 X 与 y 的第一维完全对应。
实际应用
- 表格分类与回归
- 医疗和问卷数据
- 传感器缺测
常见错误
用完整数据算填补值
把未知类别和缺失混为一谈
不分析高缺失比例特征的业务含义
文档来源
02|数据预处理与特征工程原始文档
学习资料/learning_tech/02_preprocessing_feature_engineering.md- §3 缺失值
- §12 使用 Pipeline 防止泄漏
- §13 同时处理数值和类别列
推荐学习资料
暂未收录相关资料
参考库不会生成虚假资源或无效外部链接。