替换分类数据中的缺失值

时间:2017-09-08 16:16:18

标签: machine-learning missing-data categorical-data

假设我有一个带有分类数据的列"红色" "绿色" "蓝色"和空单元

red
green
red
blue
NaN

我确定NaN属于红绿蓝,我应该用颜色的平均值替换NaN还是一个太强的假设?它将是

col1 | col2 | col3
  1      0     0
  0      1     0
  1      0     0
  0      0     1
 0.5    0.25  0.25

或者甚至缩放最后一行但是保持比率以使这些值影响较小?通常什么是最佳做法?

 0.25  0.125  0.125

3 个答案:

答案 0 :(得分:1)

处理缺失数据的最简单策略是删除包含缺失值的记录。

scikit-learn库提供了Imputer()预处理类,可用于替换缺失值。由于它是分类数据,因此不建议使用均值作为替换值。你可以使用

from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='most_frequent', axis=0)

Imputer类直接在NumPy数组而不是DataFrame上运行。

最后但并非最不重要的是,并非所有ML算法都无法处理缺失值。 ML的不同实现也不同。

答案 1 :(得分:0)

这取决于您想要对数据执行的操作。 这些颜色的平均值对您的目的有用吗? 您正在创建一个新的可能值,这可能是不想要的。特别是因为您正在谈论分类数据,并且您正在处理它,就像它是数字数据一样。

在机器学习中,您将使用关于目标属性的最常见分类值(您要预测的内容)替换缺失值。

示例:您想要通过查看他们的汽车来预测一个人是男性还是女性,并且颜色特征具有一些缺失值。如果男性(女性)司机的大多数汽车都是蓝色(红色),那么您可以使用该值来填补男性(女性)司机缺少的汽车条目。

答案 2 :(得分:0)

除了Lan的答案的方法,这似乎是最常用的,你可以使用基于矩阵分解的东西。例如,有Generalized Low Rank Models的变体可以归因于这些数据,就像使用概率矩阵分解来估算连续数据一样。

GLRMs can be used from H2O,它为Python和R提供绑定。