缺失值处理(r语言,mice包)

对缺失值的处理是数据预处理中的重要环节,造成数据缺失的原因有:数据丢失、存储故障和调查中拒绝透露相关信息。这里我们使用VIM包中的sleep数据集为样本,介绍缺失值处理的方法。sleep数据集纪录了62个哺乳动物的睡眠信息,包括体重,睡眠时长,做梦时长等。

  • 缺失值分类

1,完全随机缺失(MCAR):缺失数据与其他变量无关。如果每个缺失变量都为MCAR,则完整样本可看为更大数据集的简单抽样。

2,随机缺失(CAR):缺失数据与其他观测变量相关,与本身变量不相关。比如体重小的动物Dream数据更容易缺失(较小动物难以观察),此时选定体重,则Dream缺失为随机。

3,非随机缺失(MNAR):缺失数据不仅依赖于其他变量还依赖于本身变量。比如做梦时间短,Dream容易缺失(可能由于时间短难测量),此时数据缺失为MNAR。

数据缺失一般为前两种情况,最后一种情况的处理较复杂,要对感兴趣的关系进行建模,还要对缺失值的生成机制进行建模,并不断收集新数据。

  • 判断缺失值

1,is.na()函数。作用于向量、数据框,对应数值为缺失值则返回TRUE,否则返回FALSE。将sum()函数作用于is.na()的结果,可返回缺失值数量。

2,complete.cases()函数,返回逻辑值向量。与is.na()函数相反,缺失值返回FALSE,正常数据返回TRUE,常用来选择无缺失的数据。

  • 判断缺失模式

1,列表显示缺失情况。这里使用mice包中的md.pattern()函数。

2,图形显示缺失情况。

(1)aggr()函数

左侧图显示了每个字段中缺失样本数量,右侧每一行代表了一种缺失模式,红色代表缺失,蓝色代表未缺失,右侧表示此模式数量,可与md.pattern()结果对应观察。

(2)matrixplot()函数

浅色代表值小,深色代表值大,红色代表缺失。matrixplot()展示了每条样本的缺失情况。

(3)marginplot()函数,每次只能绘制两个变量的缺失情况。

如果为MCAR,红绿箱线图应该很类似。

3,相关性探索缺失情况。通过生成影子矩阵,用1表示缺失数据,选取有缺失的样本,计算缺失相关系数矩阵。有助于观察哪些变量常一起缺失,以及分析变量“缺失”与其他变量间的关系。

  • 处理缺失值

1,如果缺失样本数少且为随机出现,可考虑直接删除缺失样本。用na.omit(sleep)或者complete.cases(sleep)。如果某一字段的缺失比例达到5%以上,可与考虑删除此字段。

2,替换缺失值。可以通过均值、中位数、随机数来替换缺失值,但是会引入偏差。

3,多重插补法。mice包中的mice()函数可以通过插补返回多个完整数据集并存入imp,用with函数对imp进行线性回归,最后用pool()函数对回归结果进行汇总。

mice()函数默认生成5个完整数据集。查看插补数据,可用temp$imp,结果为每个数据集(第一行)每个观测值(第一列)对插补数据。

nmis表示变量中缺失数据个数,fmi表示由缺失数据贡献对变异。with用来检验某数据集是否合格,pool用来检验整个方法是否合格,以此判断选择哪个数据集。

最后用complete()函数生成完整数据集,这里选择生成对第一个数据集来对缺失值进行替换。


机器学习养成记

原文发布于微信公众号 - 机器学习养成记(chenchenwings)

原文发表时间:2017-07-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

机器学习笔记(5):多类逻辑回归-手动添加隐藏层

了解神经网络原理的同学们应该都知道,隐藏层越多,最终预测结果的准确度越高,但是计算量也越大,在上一篇的基础上,我们手动添加一个隐藏层,代码如下(主要参考自多层感...

23660
来自专栏人人都是极客

Peter教你谈情说AI | 09决策树(下)—既能回归又能分类的模型

我们提取七个特征,用来判断一个形象,是人是猫。这七个特征包括:有否蝴蝶结;是否穿衣服;是否高过5个苹果;是否有胡子;是否圆脸;是否有猫耳朵;是否两脚走路。

9820
来自专栏求索之路

cs231n之SVM算法和SoftMax算法

1.环境搭建以及前置条件 1.前置环境: 1.mac 2.pycharm 3.python3 4.Anaconda 2.环境搭建: 1.官网下载并安装Ana...

35260
来自专栏梦里茶室

TensorFlow深度学习笔记 循环神经网络实践

加载数据 使用text8作为训练的文本数据集 text8中只包含27种字符:小写的从a到z,以及空格符。如果把它打出来,读起来就像是去掉了所有标点的wikip...

30750
来自专栏AI研习社

一篇文章教你用 11 行 Python 代码实现神经网络

编者按:本文作者陶言祺,原文载于作者个人博客,雷锋网 AI 研习社已获授权。 声明:本文是根据英文教程 A Neural Network in 11 lines...

378160
来自专栏磐创AI技术团队的专栏

使用Keras进行深度学习:(一)Keras 入门

导语 Keras是Python中以CNTK、Tensorflow或者Theano为计算后台的一个深度学习建模环境。相对于其他深度学习的框架,如Tensorflo...

39160
来自专栏生信小驿站

R 支持向量机①

11220
来自专栏人工智能LeadAI

layer定义 | 深度学习caffe框架

首先让我们回顾一下caffe的代码层次: blob,layer, net和solver.

10710
来自专栏菩提树下的杨过

机器学习笔记(3):多类逻辑回归

仍然是 动手学尝试学习系列的笔记,原文见:多类逻辑回归 — 从0开始 。 这篇的主要目的,是从一堆服饰图片中,通过机器学习识别出每个服饰图片对应的分类是什么(比...

47080
来自专栏贾志刚-OpenCV学堂

基于OpenCV实现手写体数字训练与识别

OpenCV实现手写体数字训练与识别 机器学习(ML)是OpenCV模块之一,对于常见的数字识别与英文字母识别都可以做到很高的识别率,完成这类应用的主要思想与方...

65360

扫码关注云+社区

领取腾讯云代金券