在数据分析和机器学习任务中,处理缺失值是数据预处理的关键步骤之一。Scikit-learn提供了SimpleImputer
类来方便地进行缺失值填补。
缺失值填补的原理
缺失值填补(Imputation)指用替代值替换数据集中缺失的数值。常见方法包括:
- 均值填补:用特征的均值填补缺失值。
- 中位数填补:用特征的中位数填补缺失值。
- 众数填补:用特征的众数填补缺失值。
- 常数填补:用指定的常数值填补缺失值。
适用情况
- 数据完整性:许多机器学习算法无法处理含有缺失值的数据。
- 模型性能:填补后的数据更加完整和一致,提高模型的性能和稳定性。
- 数据分析:提供更加可靠的分析结果。
步骤
- 导入库:导入
SimpleImputer
、numpy
等必要库。 - 加载数据:创建或加载包含缺失值的数据集。
- 实例化SimpleImputer:创建
SimpleImputer
对象,指定填补策略。 - 拟合并转换数据:使用
fit_transform
方法对训练数据进行填补,对测试数据使用transform
方法进行填补。
示例代码
import numpy as np
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
# 生成示例数据(包含缺失值)
X = np.array([[1, 2], [np.nan, 3], [7, 6], [4, np.nan], [7, 8], [np.nan, 5], [7, 9], [8, np.nan], [np.nan, 10], [10, 11]])
y = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
# 分割数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建SimpleImputer对象,使用均值填补
imputer = SimpleImputer(strategy='mean')
# 对训练数据进行拟合并转换
X_train_imputed = imputer.fit_transform(X_train)
# 对测试数据进行转换(使用在训练数据上计算的填补值)
X_test_imputed = imputer.transform(X_test)
# 输出填补后的数据
print("Imputed Training Data:\n", X_train_imputed)
print("Imputed Testing Data:\n", X_test_imputed)
缺失值填补是数据预处理中必不可少的一步。Scikit-learn的SimpleImputer
工具使得这一过程简单、高效。