在处理缺失数据的时候,最常用的方法是:
删除 ,最简单最直接的方法,很多时候也是最有效的方法,这种做法的缺点是可能会导致信息丢失。删除有缺失数据的样本删除有过多缺失数据的特征
-
补全用规则或模型将缺失数据补全,这种做法的缺点是可能会引入噪声。
- 平均数、中位数、众数、最大值、最小值、固定值、插值等等建立一个模型来“预测”缺失的数据。
- KNN, Matrix completion等方法引入虚拟变量(dummy variable)来表征是否有缺失,是否有补全。
- 把缺失列当成标签,用剩下变量来预测缺失值。一般用比较简单的模型,比如可以用kNN,regression tree。这个方法的缺点是引入了偏差。
忽略有一些模型,如随机森林,自身能够处理数据缺失的情况,在这种情况下不需要对缺失数据做任何的处理,这种做法的缺点是在模型的选择上有局限。
在sklearn的preprocessing包中主要是应用Imputer类进行缺失值处理
- scikit-learn的Imputer类提供了估算缺失值的基本策略,可以使用缺失值所在的行或列的均值,中位数或最频繁值。这个类还允许不同的缺失值编码。
from sklearn.proprecessing import Imputer
"""
填补缺失值:sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)
主要参数说明:
missing_values:缺失值,可以为整数或NaN(缺失值numpy.nan用字符串‘NaN’表示),默认为NaN
strategy:替换策略,字符串,默认用均值‘mean’替换
①若为mean时,用特征列的均值替换
②若为median时,用特征列的中位数替换
③若为most_frequent时,用特征列的众数替换
axis:指定轴数,默认axis=0代表列,axis=1代表行
copy:设置为True代表不在原数据集上修改,设置为False时,就地修改,存在如下情况时,即使设置为False时,也不会就地修改
"""
【参考】