R语言使用稀疏矩阵onehot编码问题

R语⾔使⽤稀疏矩阵onehot编码问题
1.第⼀种⽅法:利⽤CatEncoders包
适⽤于train与test中部分特征所含类别不完全⼀致,有部分重合的情况。
需要onehot的那些列合并,形成⼀个矩阵或者数据框X1,然后使⽤OneHotEncoder.fit与transform来onehot,可⽤sparse参数来指定是否需要稀疏矩阵格式
total_onehot <- OneHotEncoder.fit(X1) ;
z <- transform(total_onehot,train[onehot列],sparse=TRUE)
将剩下的列形成的X2使⽤Martix包的Matrix函数进⾏进⾏稀疏化
Matrix(X2,sparse = T)
使⽤cbind合并2个稀疏矩阵
2.第⼆种⽅法:利⽤Matrix包
适⽤于train与test中部分特征所含类别完全⼀致情况
绥靖政策小丑快递使⽤del.matrix函数,将需要onthot的变量都变成因⼦类型或者字符类型,再使⽤del.matrix(~.-1,data)
电脑故障诊断大师
例如对mtcars数据集,我们不需要前2个变量,分别为mpg,cyl,则可以这么写:
现在我想对gear和carb这2个变量onehot,同时也不需要mpg,cyl这2个变量,则可以写成下⾯这样:
mtcars1 <- data.table(mtcars)
三平精神mtcars1$gear <- as.character(mtcars1$gear)
mtcars1$carb <- as.character(mtcars1$carb)乙草胺
看起来使⽤第⼆种⽅法会更好⼀点,⼀般我们也使⽤第⼆种⽅法,但是有时候会有⼀些特殊场景需要使⽤第⼀种⽅法:如我们想对train中与test中的所有出现过的⽤户ID进⾏onehot,这时如果你⽤第⼆
种⽅法,则会有train与test会有不同特征维度。
这边都把数据进⾏稀疏化的原因是⼯作中的数据量太⼤,如果不稀疏化你onehot⼀下内存就爆了,⽽且像xgboost与lightgbm这两个模型都天⽣⽀持稀疏矩阵的格式的。
如果有些模型不⽀持这种格式,你可以使⽤as函数来进⾏转化,例如LiblineaR包⽀持的稀疏矩阵格式为SparseM包的,那么我们则可以这么做:
浅源地震library(LiblineaR)
data <- as(data, 'matrix.csr')
也可以发现如果模型不同,要设置各种数据格式⽐较⿇烦,如果有⼀个通⽤的数据格式,针对这个格式使⽤各种模型是极好的,下⾯的的⼏票博客会翻译介绍下h2o这个包,这个包类似python中的sklearn,只要转化成h2o的数据格式就能被他的各种模型使⽤。

本文发布于:2024-09-20 22:30:24,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/53788.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   需要   格式   部分   作中   类型   变量
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议