怎么留出好看的胡子法的R语言!!!!

R语言处理缺失值的若干方法
R语言处理缺失值的若干方法
在处理数据的过程中,样本往往会包含缺失值。我们有必要对缺失值进行处理,这样不但可以降低预测分析的数据偏差,而且还可以构建有效的模型。本文将简要介绍几种常见的数据缺失值处理方法。
数据准备和模式设定
本文所涉及到的几种数据缺失值处理方法都是使用mlbench包中的BostonHousing数据集作为演示数据。由于BostonHousing数据集没有缺失值,为了演示需要,在数据集中随机插入缺失值。通过这种方法,我们不仅可以评估由数据缺失带来的精度损失,也可以比较不同处理方式的效果好坏。
# 初始化数据
library(mlbench)
data ("BostonHousing", package="mlbench")
original &- BostonHousing
# 填充缺失值
set.seed(100)
BostonHousing[sample(1:nrow(BostonHousing), 40), "rad"] &- NA
BostonHousing[sample(1:nrow(BostonHousing), 40), "ptratio"]
在插入缺失值之后,我们可以使用mice包中md.pattern函数查看缺失值的“数据模式”
# 缺失值的模式
library(mice)
md.pattern(BostonHousing)
crim zn indus chas nox rm age dis tax ptratio b lstat medv rad
以下是处理缺失值数据的常见四种方法:
1、删除记录
如果训练数据集包含有大量的观测值,那么你可以尝试删除包含缺失值的观测行(或者是在构建模型的时候不包含缺失值,例如设置na.action=na.omit)。在删除含有缺失值的观测行之前请确保满足以下两个条件:
有足够样本点
不会引入偏差
举例如下:
lm(medv ~ ptratio + rad, data=BostonHousing, na.action=na.omit)
2、删除变量
如果数据集中的某个特定变量包含许多的缺失值,并且通过删除这个特定变量你可以保留许多的观测值。除非该变量是一个非常重要的预测指标,否则我建议你删除它。应用这个方法需要我们在变量的重要性和观测的数量之间做权衡。
3、用均值/中位数/众数进行插补
处理缺失值数据的一种简单粗暴方法是插补均值、中位数或者众数。在具体环境下,如果该自变量对因变量的影响比较小,那么这种粗略的估计是可以接受的,并且有可能会产生令人满意的结果。
举例如下:
library(Hmisc)
impute(BostonHousing$ptratio, mean)
# 插补均值
impute(BostonHousing$ptratio, median)
# 插补中位数
impute(BostonHousing$ptratio, 20)
# 填充特定值
# 手动插值
BostonHousing$ptratio[is.na(BostonHousing$ptratio)] &- mean(BostonHousing$ptratio, na.rm = T)
下面通过均值来插补缺失值,并计算准确度。
library(DMwR)
actuals &- original$ptratio[is.na(BostonHousing$ptratio)]
predicteds &- rep(mean(BostonHousing$ptratio, na.rm=T), length(actuals))
regr.eval(actuals, predicteds)
用预测值来处理缺失值的一种高级的方法,主要包括:KNN插值,rpart包,mice包
4.1 kNN插值法
DMwR包中的knnImputation函数使用k近邻方法来填充缺失值。具体过程如下:对于需要插值的记录,基于欧氏距离计算k个和它最近的观测。接着将这k个近邻的数据利用距离逆加权算出填充值,最后用该值替代缺失值。
该方法的优点是只需调用一次函数就能对所有缺失值进行填充。该函数的参数是除了响应变量之外所有变量组成的数据框。这是因为你无法对未知的响应变量进行插值。
library(DMwR)
knnOutput &- knnImputation(BostonHousing[, !names(BostonHousing) %in% "medv"])
# 使用KNN插值.
anyNA(knnOutput)
actuals &- original$ptratio[is.na(BostonHousing$ptratio)]
predicteds &- knnOutput[is.na(BostonHousing$ptratio), "ptratio"]
regr.eval(actuals, predicteds)
与均值插值法相比,mape的值降低了39个百分点。
knn插值法的缺点是对因子类变量的插补效果不好。rpart包和mice包提供了更灵活的解决方案。rpart的优点是只需一个未缺失值就可以填充整个数据样本。
对因子变量而言,rpart函数式可以把method设为class(分类树)。数值型变量就设定method=anova(回归树)。当然,我们也要剔除响应变量。
library(rpart)
class_mod &- rpart(rad ~ . - medv, data=BostonHousing[!is.na(BostonHousing$rad), ], method="class", na.action=na.omit)
# rad变量是因子型变量
anova_mod &- rpart(ptratio ~ . - medv, data=BostonHousing[!is.na(BostonHousing$ptratio), ], method="anova", na.action=na.omit)
# ptratio是数值型变量
rad_pred &- predict(class_mod, BostonHousing[is.na(BostonHousing$rad), ])
ptratio_pred &- predict(anova_mod, BostonHousing[is.na(BostonHousing$ptratio), ])
ptratio的插补精度
actuals &- original$ptratio[is.na(BostonHousing$ptratio)]
predicteds &- ptratio_pred
regr.eval(actuals, predicteds)
与knn插值法相比,mape值又额外下降了30%。好极了。
rad的插补精度
actuals &- original$rad[is.na(BostonHousing$rad)]
predicteds &- as.numeric(colnames(rad_pred)[apply(rad_pred, 1, which.max)])
mean(actuals != predicteds)
# 计算误分类比率
仅有25%的缺失值被误分类,这个结果也不坏。
mice是链式方程多元插值的简写(Multivariate Imputation by Chained Equations)。mice包提供了多种先进的缺失值处理方法。它使用一种不同寻常的方法来进行两步插值:首先利用mice函数建模再用complete函数生成完整数据。mice(df)会返回df的多个完整副本,每个副本都对缺失的数据插补了不同的值。complete()函数则会返回这些数据集中的一个(默认)或多个。下面演示用该方法如何对rad和ptratio这两个变量进行插值:
library(mice)
miceMod &- mice(BostonHousing[, !names(BostonHousing) %in% "medv"], method="rf")
# 基于随机森林模型进行mice插值
miceOutput &- complete(miceMod)
# 生成完整数据
anyNA(miceOutput)
计算ptratio的插值精度:
actuals &- original$ptratio[is.na(BostonHousing$ptratio)]
predicteds &- miceOutput[is.na(BostonHousing$ptratio), "ptratio"]
regr.eval(actuals, predicteds)
mape值与rpart相比提升了48个百分点。
rad的插补精度:
actuals &- original$rad[is.na(BostonHousing$rad)]
predicteds &- miceOutput[is.na(BostonHousing$rad), "rad"]
mean(actuals != predicteds)
# compute misclass error.
误分类比率为15%,也就是说40个缺失观测里插补错误的只有6个。相对rpart方法的错误率(25%)来说,有了很大的提升。
如果你想更深入的了解,可以查看mice包的和DataScience+网站上的另一篇。
尽管通过本文你已经对各类处理方法有了初步了解,但这还不足以帮助你判断每种方法的优劣。当你下次处理缺失值的时候,这些方法是值得一试的。
本文由负责翻译整理,原文请参考作者Selva Prabhakaran。转载请注明本文链接
23832次阅读
17330次阅读
14296次阅读
13360次阅读
11914次阅读
10687次阅读
3293名学员
1876名学员
1842名学员
1355名学员
1238名学员
1125名学员
微信扫一扫
服务时间: 9:30 - 18:30
contact@xueqing.tv
186-o002-I946
官方QQ群:
关注微信订阅号
&&& Copyright & 2018
还没雪晴数据网账号?
邮箱地址 *
获取验证码
确认密码 *
获取验证码
确认密码 *Posts - 673,
Articles - 0,
Comments - 32
14:23 by Loull, ... 阅读,
R语言基本语法
基本数据类型
向量 vector
矩阵 matrix
数组 array
数据框 data frame
因子 factor
单个数值(标量)没有单独的数据类型,它只不过是向量的一种特例
向量的元素必须属于某种模式(mode),可以整型(integer)、数值型(numeric)、字符型(character)、逻辑型(logical)、复数型(complex)
循环补齐(recycle):在一定情况下自动延长向量
筛选:提取向量子集
向量化:对向量的每一个元素应用函数
使用seq()创建向量
使用rep()重复向量常数
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数。所以矩阵也和向量一样,有模式的概念,例如数值型或字符型。(但反过来,向量却不能看作是只有一列或一行的矩阵。)
增加或删除行(列)
数组(array)是R里一个更一般的对象,矩阵是数组的一个特殊情形。数组可以是多维的。例如一个三维的数组可以包含行、列和层(layer),而一个矩阵只有行和列两个维度。
array(data = NA, dim = length(data), dimnames = NULL)
as.array(x, ...)
is.array(x)
向量的元素要求都是同类型的,而列表(list)与向量不同,可以组合多个不同类型的对象
数据框类似矩阵,有行和列这两个维度。然而,数据框与矩阵不同的是,数据框的每一列可以是不同的模式(mode)。例如,某列可能由数字组成,另一列可能由字符串组成。
因子的设计思想来源于统计学中的名义变量(nominal variables),或称之为分类变量(categorical variables)。这些变量的值本质上不是数字,而是对应为分类,例如民主党、共和党和无党派,尽管它们可以用数字编码。
x + y 加法
x - y 减法
x * y 乘法
x / y 除法
x ^ y 乘幂
x %% y 模运算
x %/% y 整数除法
x == y 判断是否相等
x &= y 判断是否小于等于
x &= y 判断是否大于等于
x && y 标量的逻辑&与&运算
x || y 标量的逻辑&或&运算
x & y 向量的逻辑&与&运算(x、y以及运算结果都是向量)
x | y 向量的逻辑&或&运算(x、y以及运算结果都是向量)
逻辑值TRUE和FALSE可以缩写为T和F(两者都必须是大写)。而在算术表达式它们会转换为1和0
g &- function(x) {
return(x+1)
函数也是对象
if (r == 4) {
repeat没有逻辑判断退出条件,必须利用break(或者类似return())的语句。当然,break也可以用在for循环中。
代码格式化工具
library(formatR)subset()详细用法 r语言_百度知道
subset()详细用法 r语言
您的回答被采纳后将获得:
系统奖励15(财富值+成长值)+难题奖励30(财富值+成长值)+提问者悬赏50(财富值+成长值)
我有更好的答案求助知道网友
? subset 解决一切?是英文半角状态下的问号。。。
select = Ozone, select = -Temp)subset(airquality, Day == 1subset(airquality, Temp & 80, select = c(Ozone, Temp))subset(airquality
本回答被网友采纳
1条折叠回答
为您推荐:
其他类似问题
您可能关注的内容
r语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。苹果/安卓/wp
积分 57952, 距离下一级还需
权限: 自定义头衔, 签名中使用图片, 隐身, 设置帖子权限, 设置回复可见, 签名中使用代码
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发, 提升卡, 沉默卡, 千斤顶, 变色卡, 置顶卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
TA的文库&&
摘要: Free Dataundefinedata Source - PackageGoogle Finance historical data - quantmodGoogle Finance balance sheets - quantmodYahoo Finance historical data - quantmodYahoo Finance historical data - tseriesYahoo Fin ...
Free Data:
Data Source - Package
- quantmod
- quantmod
Yahoo Finance historical data -
- quantmod
[url=http://finance.yahoo.com/q/ud?s=MSFT]Yahoo Finance historical analyst estimates[/url] -
- fImport - seems to be broken
historic exchange rates/metal prices - quantmod
historic macroeconomic indicators - quantmod
Google Docs -
- - requires free account
Geocode addresses -
Map coordinates to political boundaries - RDSTK
netCDF Data -
Public health data -
Paid Data:
from NYSE -
Useful Tools:
总评分:&经验 + 60&
论坛币 + 10&
热心指数 + 1&
本帖被以下文库推荐
& |主题: 17, 订阅: 9
& |主题: 114, 订阅: 52
Nicolle 发表于
摘要: Free Dataundefinedata Source - PackageGoogle Finance historical data - quantmodGoogle Finance&&...谢谢你的啊!
看不懂怎么用&&能不能举一个例子&&演示一下怎么用啊
好东西,谢谢了
r curl 国内数据如何获得
非常感谢分享
国内数据有吗?
初级学术勋章
初级学术勋章
初级热心勋章
初级热心勋章
中级热心勋章
中级热心勋章
初级信用勋章
初级信用勋章
中级学术勋章
中级学术勋章
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师}

我要回帖

更多关于 狂战6 3留出什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信