替换分类数据中的缺失值

replace missing values in categorical data

假设我有一列包含分类数据 "red" "green" "blue" 和空单元格

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

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

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

例子:你想通过看一个人的车来预测他是男是女,颜色特征有一些缺失值。如果男性(女性)司机的大部分汽车是蓝色(红色),您将使用该值来填充男性(女性)司机的汽车的缺失条目。

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

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

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

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

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

除了看起来最常用的 Lan 的答案方法之外,您还可以使用基于矩阵分解的方法。例如,有一个 Generalized Low Rank Models 的变体可以估算此类数据,就像概率矩阵分解用于估算连续数据一样。

GLRMs can be used from H2O 为 Python 和 R.

提供绑定