R 在一个热编码中每行有多个值-建议这样做吗?
我正在使用R 在一个热编码中每行有多个值-建议这样做吗?,r,r-caret,one-hot-encoding,R,R Caret,One Hot Encoding,我正在使用mltools中的one\u hot函数将一个2变量的数据帧转换为一个宽数据帧,其中每个变量(除了索引)都是一个因子级别 熔化的框架中有25000行,只有2个变量——一个是800级的因子,一个是索引,这样我可以在以后再合并回去 我将使用各种机器学习包,因此需要以一种可接受的方式表示800因子水平 然而,当我使用one\u hot时,我得到了一个包含801列的框架,这是正确的(800个因子级别+1个索引)但是我仍然有25000行。索引中以唯一值表示的原始观测数为1000 所以,我的问题是
mltools
中的one\u hot
函数将一个2变量的数据帧转换为一个宽数据帧,其中每个变量(除了索引)都是一个因子级别
熔化的框架中有25000行,只有2个变量——一个是800级的因子,一个是索引,这样我可以在以后再合并回去
我将使用各种机器学习包,因此需要以一种可接受的方式表示800因子水平
然而,当我使用one\u hot
时,我得到了一个包含801列的框架,这是正确的(800个因子级别+1个索引)但是我仍然有25000行。索引中以唯一值表示的原始观测数为1000
所以,我的问题是——一个热变量每行只有一个正值是最佳实践吗?现在将其向下折叠,使每一行都是一个观察值,是否有缺点
谢谢。我将根据您提供的信息回答问题 基本上,你有25000个索引观察值(由
id
表示)的一个变量(800级的因子变量,由val
表示)。你能做的是:
分组依据()
)freq=n()
)mltools
包真的很适合这样做)> str(result)
Classes ‘data.table’ and 'data.frame': 800 obs. of 801 variables:
$ val_AAL5 : int 1 0 0 0 0 0 0 0 0 0 ...
$ val_ABP14: int 0 1 0 0 0 0 0 0 0 0 ...
$ val_ACQ8 : int 0 0 1 0 0 0 0 0 0 0 ...
$ val_ADU8 : int 0 0 0 1 0 0 0 0 0 0 ...
$ val_AEB16: int 0 0 0 0 1 0 0 0 0 0 ...
$ val_AEX17: int 0 0 0 0 0 1 0 0 0 0 ...
$ val_AGQ4 : int 0 0 0 0 0 0 1 0 0 0 ...
$ val_AHS8 : int 0 0 0 0 0 0 0 1 0 0 ...
$ val_AHV2 : int 0 0 0 0 0 0 0 0 1 0 ...
$ val_AHX16: int 0 0 0 0 0 0 0 0 0 1 ...
$ val_AIV19: int 0 0 0 0 0 0 0 0 0 0 ...
...
密码
df%
分组依据(val)%>%
总结(freq=n())
你能提供一个小的可重复的例子吗?
df <- df %>%
group_by(val) %>%
summarise(freq = n())
dt <- as.data.table(df)
result <- one_hot(dt)
library(dplyr)
library(data.table)
library(mltools)
set.seed(1701)
df <- data.frame(
id = 1:25000,
val = sample(paste0(sample(LETTERS[1:26], 800, replace = TRUE),
sample(LETTERS[1:26], 800, replace = TRUE),
sample(LETTERS[1:26], 800, replace = TRUE),
sample(1:20, 20, replace = TRUE)),
25000, replace = TRUE))
> head(df)
id val
1 1 CXC15
2 2 IPH16
3 3 ICK1
4 4 OPJ2
5 5 XSA8
6 6 JKS19