假设我有一个带有分类数据的列"红色" "绿色" "蓝色"和空单元
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
答案 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提供绑定。