训练集中有的特征含有缺失值,一般怎么处理

  统计/机器学习 数据预处理    浏览次数:12001        分享
15

训练集样本中有的数值特征列含有缺失值,一般怎么处理?我一般都是取这一列的平均值,有更好的方法,或者其他可行的方法吗?

 

机器小白   2017-03-17 12:40



   5个回答 
21

1. 替代法

用该列的中位数或者平均值或者众数来代替这列中所有的缺失值。也可以从这一列中随机抽样(bootstrap)。

对于时间序列变量,可以用插值的方法。

这个方法的缺点是让数据增加了很多noise。

2. 预测法

把这一列当成标签,用剩下变量来预测缺失值。

一般用比较简单的模型,比如可以用kNN,regression tree。

这个方法的缺点是引入了偏差。

3. 消极处理

如果某一行的缺失值很多,就把这一行删了。

如果某一列的缺失值很多,就把这一列删了。

或者直接不处理,有些模型,比如random forest,可以直接处理有缺失值的数据。

SofaSofa数据科学社区DS面试题库 DS面经

batmanX   2017-04-01 09:26

16

先看看缺失值多不多,如果这一变量里面95%都是缺失的,我觉得这一列的参考意义也不会大,不如就把这一列给删掉。

对于数值变量(numeric)来说,可以用平均值来代替。

对于分类变量(categorical)来说,可以把缺失值统一当作一个新的分类来处理。

SofaSofa数据科学社区DS面试题库 DS面经

雷猴   2017-04-01 08:36

补充一下,还需要先看看这些missing data是随机的还是非随机的。也许由于问卷的设定,采样的方法等等问题,可能导致某类型的数值更容易缺失。 - 雷猴   2017-04-02 11:25
7

说句我的实战经验,如果数据是来自自家公司的数据库,那以上方法都不是最有效的。最有效的方法是去找负责数据库的码农同志聊一聊。标本兼治,药到病除。

SofaSofa数据科学社区DS面试题库 DS面经

高代兄   2017-04-01 13:06

5

从实际角度出发,首先要了解缺失的原因;其次,看缺失值和预测值的联合分布,看看其中有没有什么蹊跷。

从处理的角度来说,如题主说到的,

  • 可以用均值,也可以用众数,中位数;
  • 可以按类的均值(众数、中位数)补全,比如说数据中A列中的数值有缺失,B列是一个categorical variable,你可以按照B列中的类别,用类别的均值对A列中的数据补全。


SofaSofa数据科学社区DS面试题库 DS面经

木子周   2017-09-17 10:59

3

直接看这个链接就完事了,清晰明了

ps 我的实际经验是在imputing的时候用MCMC sampling或者Random Forest的效果很棒,尤其推荐mice 这个package

How to Handle Missing Data

SofaSofa数据科学社区DS面试题库 DS面经

aragakiyuii   2018-11-10 07:01



  相关讨论

如何判断缺失值是否是随机的缺失?

数据预处理中,都有哪些方法能够处理缺失值(missing value)

怎么对dataframe中的某一列groupby求缺失值的个数?

dataframe每行或者每列中缺失值(na, nan, null)的个数

如何处理聚类中的missing data

怎样处理具有大标签的数据?以及标签数据缺失怎么处理?

决策树或者随机森林能够直接处理missing data吗?

pandas里有没有类似于sql里coalesce的函数来处理缺失值?

pandas DataFrame中去掉缺失值多于50%的列

如何在日期序列中补齐缺失的日期

  随便看看

lightgbm.LGBMModel和lightgbm.LGBMClassifier该用哪个?

神经网络中的dense和sparse是什么意思?

'numpy.ndarray' object has no attribute 'head'

怎么利用permutation importance来解释xgboost模型的特征?

怎么对pandas dataframe的列求众数