missForest一种非参数的缺失值填补方法
来源:互联网 发布:剑网3捏脸数据女 编辑:程序博客网 时间:2024/05/01 01:50
介绍
对于处理现实中的数据时,我们常常会遇到缺失值,这里我们将介绍一种缺失值的填补方法missForest,这是利用随机森林来填补缺失值的非参数方法,他可以适用于任何类型的数据(连续、离散)。其他类似的缺失值填补方法还有MICE,在这里不做介绍。
方法
我们假设我们的数据是
1.用
2.用
3.用
4.用
我画了一个图,可以帮助大家更好的理解这4个部分的组成:
红色部分就是
接来下我们只需要使用随机森林,训练出y~x的模型,然后将缺失值预测出来就可以了,但是不只是Xs存在缺失值,其他变量也是有可能存在缺失值的,这时候我们可以通过迭代的方式来求解。
我们先对缺失值做一个初始的猜测,比如用均值/中位数填充,然后按照变量的缺失率,从小到大排序,先对缺失率小的变量使用随机森林回归从而填补该变量的缺失值,然后一直迭代,直到最新的一次填补结果与上一次的填补结果不再变化(变化很小)时停止。
具体伪代码在这里:
这里的收敛指标是迭代中缺失值变化的大小,对于连续型变量,我们有:
对于离散型变量:
其中#NA是在离散变量中的总的缺失值数量。
R语言实现应用
我们可以使用R包:missForest 来应用这一方法:
以下是一个使用例子:
> library(missForest)> set.seed(81)> iris.mis <- prodNA(iris, noNA = 0.2) #产生20%缺失值> summary(iris.mis) Sepal.Length Sepal.Width Petal.Length Petal.Width Species Min. :4.300 Min. :2.000 Min. :1.100 Min. :0.100 setosa :40 1st Qu.:5.200 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300 versicolor:38 Median :5.800 Median :3.000 Median :4.450 Median :1.300 virginica :44 Mean :5.878 Mean :3.062 Mean :3.905 Mean :1.222 NAs :28 3rd Qu.:6.475 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.900 Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500 NAs :28 NAs :29 NAs :32 NAs :33 > iris.imp <- missForest(iris.mis, verbose = TRUE)> iris.imp$ximp #修补后的数据> head((iris.imp$ximp-iris)[,1:4]) Sepal.Length Sepal.Width Petal.Length Petal.Width1 0.00000000 0.00000 0.00000000 0.000000002 0.00000000 0.30825 0.00000000 0.027200003 0.00000000 0.00000 0.00000000 0.000000004 0.00000000 0.22050 -0.03142857 0.000000005 0.00000000 0.00000 0.00000000 0.000000006 0.01766667 0.00000 0.00000000 -0.02533333
可以看到修补的数据与原数据想减,我们就可以清楚的看到这个效果是很不错的,如果我们仅仅使用均值这样的填充方法,就不能够这么准确了。
当然这方法虽然效果比较好,但是相比均值填充的方法来讲,效率就太低了,如果数据量比较大的话,这个方法会很慢,至于如何使用,就看各位自己的取舍了。
参考文献:
Stekhoven D J, Bühlmann P. MissForest–non-parametric missing value imputation for mixed-type data.[J]. Bioinformatics, 2012, 28(1):112-8.
作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者a358463121专栏:http://blog.csdn.net/a358463121,如果涉及源代码请注明GitHub地址:https://github.com/358463121/。商业使用请联系作者。
- missForest一种非参数的缺失值填补方法
- 在R语言中利用mice包进行缺失值的线性回归填补
- 过程步proc stdize对缺失值进行填补
- 数据挖掘之缺失值填补常见手段
- 关于sklearn填补缺失值一点小信息
- 数据挖掘填补缺失数据
- 缺失值的处理方法
- 缺失值的处理方法
- 处理缺失值的方法
- 缺失值的处理方法
- 缺失值的处理方法
- 缺失值的处理方法
- 教你便捷的内容“填补”方法
- 树模型缺失值的方法
- Rstudio-处理缺失值的方法
- 一种获取图片RGB参数值的简单方法
- MSCVP140d.dll 缺失找不到的一种情况
- 缺失值处理方法
- Python与自然语言处理(三):Tensorflow基础学习
- 8/7排位赛,codeforces501
- tomacat修改编码等问题
- Ehcache缓存(一)
- Android 学习导航
- missForest一种非参数的缺失值填补方法
- LeetCode进阶之路( First Missing Positive)
- MIT License探讨
- JS对象及其方法-Date
- 安卓第三方支付之银联支付
- 【44】翻转单词顺序列
- 根据银行卡账号获取所属银行php代码
- java中Map
- 数论 知识概念梳理