scikit-learn:通过随机抽样填充缺失值

时间:2017-03-17 13:21:53

标签: python machine-learning scikit-learn data-science

我很惊讶sklearn.preprocessing.Imputer没有提供以下填充缺失值的策略:对于任何缺失值,从给定值中随机均匀地采样一个值并替换。

我认为这是一个比用平均值,最常值或中值替换更好的策略,因为它不会在值的分布中产生人为的峰值。

我是否需要自己编写变压器?

PS。在一个更元的讨论层面上,当我没有找到一个简单,几乎标准的操作作为像scikit-learn这样的库中的组件时,我总是有点困惑。让我想知道:这个图书馆是未完成的,还是我想做一些违反最佳做法的事情?有什么建议吗?

2 个答案:

答案 0 :(得分:0)

  

我认为这是比用平均值,最频繁的值或中值代替更好的策略,因为它不会在值的分布中产生人为的尖峰。

不幸的是,这是错误的。当您对连续变量的分布一无所知时,最好的猜测总是始终,因为它不太可能在数据中引入偏差。

如果您决定用 any 分布的随机抽样填充缺失值,则始终假定该分布为生成观测值的分布。因此,在您的数据集中引入明显的偏差。

但是,您可能会看到sklearn.impute.IterativeImputer ,它提供了一种更为复杂的插补方法。

答案 1 :(得分:0)

对于离散数字系列,从现有值中随机抽样可能比使用均值或中位数更好,后者将所有缺失值替换为一个数字,并且肯定会给分布带来人为的尖峰。