原文:
www.kdnuggets.com/how-to-handle-missing-data-with-scikit-learns-imputer-module
图片来源于编辑 | Midjourney & Canva
让我们学习如何使用 Scikit-learn 的 imputer 来处理缺失数据。
1. Google 网络安全证书 - 快速进入网络安全职业生涯
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你所在组织的 IT
确保你的环境中安装了 Numpy、Pandas 和 Scikit-Learn。如果没有,你可以通过以下代码使用 pip 安装它们:
pip install numpy pandas scikit-learn
然后,我们可以将包导入到你的环境中:
import numpy as np
import pandas as pd
import sklearn
from sklearn.experimental import enable_iterative_imputer
Scikit-Learn 插补器是一个用于用特定值替换缺失数据的类。它可以简化你的数据预处理过程。我们将探索几种处理缺失数据的策略。
让我们为示例创建一个数据示例:
sample_data = {'First': [1, 2, 3, 4, 5, 6, 7, np.nan,9], 'Second': [np.nan, 2, 3, 4, 5, 6, np.nan, 8,9]}
df = pd.DataFrame(sample_data)
print(df)
First Second
0 1.0 NaN
1 2.0 2.0
2 3.0 3.0
3 4.0 4.0
4 5.0 5.0
5 6.0 6.0
6 7.0 NaN
7 NaN 8.0
8 9.0 9.0
你可以使用 Scikit-Learn Simple Imputer 用相应列的均值填充列中的缺失值。
First Second
0 1.00 5.29
1 2.00 2.00
2 3.00 3.00
3 4.00 4.00
4 5.00 5.00
5 6.00 6.00
6 7.00 5.29
7 4.62 8.00
8 9.00 9.00
需要注意的是,我们将结果四舍五入到两位小数。
也可以使用 Simple Imputer 用中位数插补缺失数据。
imputer = sklearn.SimpleImputer(strategy='median')
df_imputed = round(pd.DataFrame(imputer.fit_transform(df), columns=df.columns),2)
print(df_imputed)
First Second
0 1.0 5.0
1 2.0 2.0
2 3.0 3.0
3 4.0 4.0
4 5.0 5.0
5 6.0 6.0
6 7.0 5.0
7 4.5 8.0
8 9.0 9.0
均值和中位数插补的方法很简单,但它可能会扭曲数据分布并在数据关系中产生偏差。
还可以使用 K-NN 插补器通过最近邻居方法填充缺失数据。
knn_imputer = sklearn.KNNImputer(n_neighbors=2)
knn_imputed_data = knn_imputer.fit_transform(df)
knn_imputed_df = pd.DataFrame(knn_imputed_data, columns=df.columns)
print(knn_imputed_df)
First Second
0 1.0 2.5
1 2.0 2.0
2 3.0 3.0
3 4.0 4.0
4 5.0 5.0
5 6.0 6.0
6 7.0 5.5
7 7.5 8.0
8 9.0 9.0
KNN 插补器将使用 k 个最近邻居的均值或中位数来填补缺失数据。
最后,还有迭代插补方法,它基于将每个缺失值的特征建模为其他特征的函数。正如本文所述,这是一个实验性功能,因此我们需要首先启用它。
iterative_imputer = IterativeImputer(max_iter=10, random_state=0)
iterative_imputed_data = iterative_imputer.fit_transform(df)
iterative_imputed_df = round(pd.DataFrame(iterative_imputed_data, columns=df.columns),2)
print(iterative_imputed_df)
First Second
0 1.0 1.0
1 2.0 2.0
2 3.0 3.0
3 4.0 4.0
4 5.0 5.0
5 6.0 6.0
6 7.0 7.0
7 8.0 8.0
8 9.0 9.0
如果你能够正确使用插补器,它可能有助于提高你的数据科学项目的质量。
Cornellius Yudha Wijaya**** 是数据科学助理经理和数据撰稿人。他在印尼安联全职工作时,喜欢通过社交媒体和写作媒体分享 Python 和数据技巧。Cornellius 在各种 AI 和机器学习话题上都有所涉猎。