缺失值处理
1、缺失值处理概述
由于各种原因,现实世界的许多数据集包含缺失值,通常将其编码为空白,NaN或其他占位符。但是,此类数据集与Scikit-Learn估计器不兼容,后者假定数组中的所有值都是具有含义的数字
使用不完整数据集的基本策略是舍弃包含缺失值的整行或整列。但是,这是以丢失可能有价值的数据为代价的(即使数据不完整)。更好的策略是估算缺失值,即从数据的已知部分推断出缺失值
缺失值的处理是数据预处理中非常重要的一步,因为很多机器学习算法都假设数据是完整的,算法的执行过程中没有考虑缺失值的影响。所以,为了提高数据质量、改进数据分析结果、提高数据挖掘和机器学习的效果,缺失值处理必不可少
对于包含缺失值的数据,有两种处理思路:
- 删除包含缺失值的行或列:会导致特征和样本数据丢失,如果数据丢失过多,可能会改变数据的分布,影响模型的准确性
- 填充缺失值:实际情况下,使用最多的还是填充缺失值
Scikit-Learn缺失值填充中文文档:https://scikit-learn.org.cn/view/124.html
下面主要介绍一些常用的缺失值填充处理方式
2、缺失值填充方式
1)单变量填充
Scikit-Learn中的SimpleImputer
类提供了填充缺失值的基本策略。可以使用提供的常量或使用缺失值所在列的统计量(平均值、中位数或众数)来估算填充缺失值。此类还支持不同的缺失值编码
from sklearn.impute import SimpleImputer
# 均值(mean)、中位数(median)、众数(most_frequent)和常量(constant)填充
# 下面以均值填充为例
data = np.array([[1, 2, 3], [4, np.NaN, 6], [7, 8, np.NaN]])
print