12 处理缺失值

在数据科学和机器学习的过程中,数据的完整性至关重要。如果数据集中的特征存在缺失值,就需要进行相应的处理,以避免对模型训练和预测结果产生负面影响。接下来,我们将介绍如何在 Scikit-Learn 框架下处理缺失值,并结合实际案例进行演示。

为什么需要处理缺失值

缺失值可能会导致以下问题:

  1. 模型训练失败:许多机器学习算法无法处理缺失值,直接使用含有缺失值的数据集会导致程序报错。
  2. 模型性能下降:即便可以处理缺失值,缺失数据的存在也可能影响模型的泛化能力,导致预测性能的下降。
  3. 偏差引入:错误地处理缺失值可能会引入更多偏差,影响结果的可靠性。

处理缺失值的方法

在 Scikit-Learn 中,处理缺失值的常见方法有:

  1. 删除缺失值
  2. 插补缺失值
  3. 使用专门的算法处理缺失值

删除缺失值

当数据集中的缺失值占比很小或不重要时,可以选择直接删除相应的行或列。但这不是一个推荐的普遍做法,因为会损失信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import pandas as pd

# 创建一个示例数据集
data = {
'A': [1, 2, None, 4],
'B': [None, 5, 6, 7],
'C': [8, 9, 10, None]
}
df = pd.DataFrame(data)

# 删除含有缺失值的行
df_cleaned = df.dropna()

print(df_cleaned)

插补缺失值

插补缺失值是另一种常见的方法,最常用的插补方式是使用特征的平均值、中位数或众数,或者使用 KNN(K-近邻算法)和其他模型。

使用均值填充

1
2
3
4
5
6
7
8
9
10
11
from sklearn.impute import SimpleImputer

# 创建插补器
imputer = SimpleImputer(strategy='mean')

# 对数据进行插补
df['A'] = imputer.fit_transform(df[['A']])
df['B'] = imputer.fit_transform(df[['B']])
df['C'] = imputer.fit_transform(df[['C']])

print(df)

使用中位数填充

1
2
3
4
5
# 修改插补策略为中位数
imputer = SimpleImputer(strategy='median')
df['C'] = imputer.fit_transform(df[['C']])

print(df)

KNN 插补

使用 KNN 插补是一种基于特征相似度的插补方法,可以很好地保留数据内在结构。

1
2
3
4
5
6
7
from sklearn.impute import KNNImputer

# 创建 KNN 插补器
knn_imputer = KNNImputer(n_neighbors=2)
df_knn = pd.DataFrame(knn_imputer.fit_transform(df), columns=df.columns)

print(df_knn)

这种方法在插补值时考虑了其他特征,有助于提供更加精确的估计。

小结

在本章节中,我们介绍了如何使用 Scikit-Learn 处理缺失值,包括删除缺失值、使用均值、中位数插补和 KNN 插补等常用方法。选择合适的缺失值处理方法对后续的模型选择和训练至关重要。在下一篇中,我们将进入模型选择的阶段,具体分析回归模型的应用和选择策略,期待与您继续深入探讨这一主题。

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

学习下节

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论