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

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

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

 

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



   4个回答 
20

1. 替代法

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

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

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

2. 预测法

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

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

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

3. 消极处理

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

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

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

batmanX   2017-04-01 09:26

16

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

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

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

雷猴   2017-04-01 08:36

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

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

高代兄   2017-04-01 13:06

5

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

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

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


木子周   2017-09-17 10:59



  相关主题

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

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

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

如何处理聚类中的missing data   3回答

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

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

python里把数据中某一列中的na,nan,缺失值都替换成0?   1回答

在数据预处理阶段,特征的标准化有哪些方法?   1回答

让DataFrame中的行按照某一列元素的绝对值从大到小排列   1回答

怎么求一个数组的移动平均数   1回答

python的dataframe如何重新排列行或者列   1回答

对于数值型变量模型怎么知道是连续变量还是离散变量?   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!