我很惊讶sklearn.preprocessing.Imputer没有提供以下填充缺失值的策略:对于任何缺失值,从给定值中随机均匀地采样一个值并替换。
我认为这是一个比用平均值,最常值或中值替换更好的策略,因为它不会在值的分布中产生人为的峰值。
我是否需要自己编写变压器?
PS。在一个更元的讨论层面上,当我没有找到一个简单,几乎标准的操作作为像scikit-learn
这样的库中的组件时,我总是有点困惑。让我想知道:这个图书馆是未完成的,还是我想做一些违反最佳做法的事情?有什么建议吗?
答案 0 :(得分:0)
我认为这是比用平均值,最频繁的值或中值代替更好的策略,因为它不会在值的分布中产生人为的尖峰。
不幸的是,这是错误的。当您对连续变量的分布一无所知时,最好的猜测总是始终,因为它不太可能在数据中引入偏差。
如果您决定用 any 分布的随机抽样填充缺失值,则始终假定该分布为生成观测值的分布。因此,在您的数据集中引入明显的偏差。
但是,您可能会看到sklearn.impute.IterativeImputer ,它提供了一种更为复杂的插补方法。
答案 1 :(得分:0)
对于离散数字系列,从现有值中随机抽样可能比使用均值或中位数更好,后者将所有缺失值替换为一个数字,并且肯定会给分布带来人为的尖峰。