gpt4 book ai didi

r - 制作稀疏矩阵时缺少列 (R)

转载 作者:行者123 更新时间:2023-11-30 09:46:48 26 4
gpt4 key购买 nike

我有两个数据集 train (这个包含变量 datestoreitem )和 test (其中有 id, date,store, item )我已将其合并为一个 df_all然后再次分区,因为我想最终使用 train用于创建预测 sales 的模型的数据集

df_all的结构是

    'data.frame':   958000 obs. of  5 variables:
$ date : Factor w/ 1916 levels "2013-01-01","2013-01-02",..: 1 2 3 4 5 6 7 8 9 10 ...
$ store: int 1 1 1 1 1 1 1 1 1 1 ...
$ item : int 1 1 1 1 1 1 1 1 1 1 ...
$ sales: num 13 11 14 13 10 12 10 9 12 9 ...
$ id : Factor w/ 45001 levels "0","1","10","100",..: 45001 45001 45001 45001 45001 45001 45001 45001 45001 45001 ...`

对数据进行分区:

set.seed(1234)
n = nrow(df_all)
index = sample(1:n, size = round(0.7*n), replace=T)
train = df_all[index, ]
test = df_all[-index, ]

然后使用one-hot编码,因为id是一个分类变量:

trainm <- sparse.model.matrix(sales ~ ., data= train)[,-1]

除了这是我遇到问题的地方,因为我的矩阵最终看起来像

6 x 46917 sparse Matrix of class "dgCMatrix"
[[ suppressing 20 column names ‘date2013-01-02’, ‘date2013-01-03’, ‘date2013-01-04’ ... ]]

108928 . . . . . . . . . . . . . . . . . . . .
596163 . . . . . . . . . . . . . . . . . . . .
583686 . . . . . . . . . . . . . . . . . . . .
597198 . . . . . . . . . . . . . . . . . . . .
824757 . . . . . . . . . . . . . . . . . . . .
613418 . . . . . . . . . . . . . . . . . . . .

108928 ......
596163 ......
583686 ......
597198 ......
824757 ......
613418 ......

.....suppressing columns in show(); maybe adjust 'options(max.print= *, width = *)'
..............................

这看起来不像我需要的稀疏矩阵,并且发生了奇怪的情况,列不应该是这样的(即日期、id、商店、项目、销售)。因此,如果有人对如何解决此问题有任何建议,或者有其他方法可以做到这一点,我们将不胜感激!

最佳答案

在分割主数据集之前,我们应该始终进行one-hot编码。原因是,有时您可能会发现测试中的值不在训练中,在这种情况下,您无法训练/预测模型,因为总列数会不匹配。

因此你应该这样做:

# ohe columns
df_ohe <- model.matrix(~.-1, data = df_all[,-c('id','date')])

# join id column with ohe columns
df_all_new <- cbind(df_all[,1], df_ohe)

而且,现在您可以将数据拆分为训练数据和测试数据。

关于r - 制作稀疏矩阵时缺少列 (R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com