博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
R语言:利用caret包中的dummyVars函数进行虚拟变量处理
阅读量:6581 次
发布时间:2019-06-24

本文共 3693 字,大约阅读时间需要 12 分钟。

dummyVars函数:dummyVars creates a full set of dummy variables (i.e. less than full rank parameterization----建立一套完整的虚拟变量

先举一个简单的例子:

survey<-data.frame(service=c("very unhappy","unhappy","neutral","happy","very happy"))survey##        service## 1 very unhappy## 2      unhappy## 3      neutral## 4        happy## 5   very happy

# 我们可以直接增加一列rank,用数字代表不同情感

survey<-data.frame(service=c("very unhappy","unhappy","neutral","happy","very happy"),rank=c(1,2,3,4,5))survey##        service rank## 1 very unhappy    1## 2      unhappy    2## 3      neutral    3## 4        happy    4## 5   very happy    5

显然,对于单个变量进行如上处理并不困难,但是如果面对多个因子型变量都需要进行虚拟变量处理时,将会花费大量的时间。
下面用caret包中的dummyVars函数对因子变量进行哑变量处理。

library(caret)## Loading required package: lattice## Loading required package: ggplot2customers<-data.frame(id=c(10,20,30,40,50),gender=c("male","female","female","male","female"),                      mood=c("happy","sad","happy","sad","happy"),outcome=c(1,1,0,0,0))customers##   id gender  mood outcome## 1 10   male happy       1## 2 20 female   sad       1## 3 30 female happy       0## 4 40   male   sad       0## 5 50 female happy       0

# 利用dummyVars函数对customers数据进行哑变量处理

dmy<-dummyVars(~.,data=customers)

# 对自身变量进行预测,并转换成data.frame格式

trsf<-data.frame(predict(dmy,newdata=customers))trsf##   id gender.female gender.male mood.happy mood.sad outcome## 1 10             0           1          1        0       1## 2 20             1           0          0        1       1## 3 30             1           0          1        0       0## 4 40             0           1          0        1       0## 5 50             1           0          1        0       0

从结果看,outcome并没有进行哑变量处理。

我们查看customers的数据类型

str(customers)## 'data.frame':    5 obs. of  4 variables:##  $ id     : num  10 20 30 40 50##  $ gender : Factor w/ 2 levels "female","male": 2 1 1 2 1##  $ mood   : Factor w/ 2 levels "happy","sad": 1 2 1 2 1##  $ outcome: num  1 1 0 0 0

可见,outcome的默认类型是numeric,现在这不是我们想要的。接下来将变量outcome转换成factor类型。

customers$outcome<-as.factor(customers$outcome)str(customers)## 'data.frame':    5 obs. of  4 variables:##  $ id     : num  10 20 30 40 50##  $ gender : Factor w/ 2 levels "female","male": 2 1 1 2 1##  $ mood   : Factor w/ 2 levels "happy","sad": 1 2 1 2 1##  $ outcome: Factor w/ 2 levels "0","1": 2 2 1 1 1

customers中的变量outcome类型转换后,我们再次用dmy对该数据进行预测,并查看最终结果。

trsf<-data.frame(predict(dmy,newdata=customers))trsf##   id gender.female gender.male mood.happy mood.sad outcome0 outcome1## 1 10             0           1          1        0        0        1## 2 20             1           0          0        1        0        1## 3 30             1           0          1        0        1        0## 4 40             0           1          0        1        1        0## 5 50             1           0          1        0        1        0

可见,outcome也已经进行了虚拟变量处理。
当然,也可以针对数据中的某一个变量进行虚拟变量(哑变量)处理。如我们需要对customers数据中的变量gender进行哑变量处理,可以执行以下操作:

dmy<-dummyVars(~gender,data=customers)trfs<-data.frame(predict(dmy,newdata=customers))trfs##   gender.female gender.male## 1             0           1## 2             1           0## 3             1           0## 4             0           1## 5             1           0

对于两分类的因子变量,我们在进行虚拟变量处理后可能不需要出现代表相同意思的两列(例如:gender.female和gender.male)。这时候我们可以利用dummyVars函数中的fullRank参数,将此参数设置为TRUE。

dmy<-dummyVars(~.,data=customers,fullRank=T)trfs<-data.frame(predict(dmy,newdata=customers))trfs##   id gender.male mood.sad outcome.1## 1 10           1        0         1## 2 20           0        1         1## 3 30           0        0         0## 4 40           1        1         0## 5 50           0        0         0

 

转载于:https://www.cnblogs.com/payton/p/5260305.html

你可能感兴趣的文章
《Java EE 7精粹》—— 2.7 安全
查看>>
《AngularJS高级程序设计》——5.9 使用承诺
查看>>
如何在 Linux 下格式化 USB 设备
查看>>
OAuth 2.0系列教程(六) 端点
查看>>
《jQuery Mobile入门经典》—— 第 2 章 使用HTML、CSS和JavaScript
查看>>
《JUnit实战(第2版)》—— 1.7 小结
查看>>
Ceph分布式存储实战导读
查看>>
戏(细)说Executor框架线程池任务执行全过程(上)
查看>>
《DB2性能管理与实战》——2.5 缓冲池管理
查看>>
IPv6 互联网中的隐私保护和网络管理器
查看>>
《Nmap渗透测试指南》—第6章6.1节关于防火墙/IDS
查看>>
ASM 翻译系列第五弹:高级知识 ASM 元数据概述
查看>>
《JavaScript专家编程》——第9章 代码质量 9.1 定义代码质量
查看>>
Maven实战. 2.1在Windows上安装Maven
查看>>
《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——3.2 动态数据流...
查看>>
Java中的IO浅析(一)
查看>>
李开复:百亿美元独角兽CEO的共同特点就是偏执、强大、think big
查看>>
C++语言基础 例程 重载双目运算符
查看>>
PostgreSQL 10.0 解读
查看>>
零基础入门深度学习(2) - 线性单元和梯度下降
查看>>