6

我有一个格式为(用户 ID、电影 ID、评级、时间)的文本文件,我想对数据集进行普通回归。(只有 4 个功能,> 400 万个实例)

model <- glm ( UserId ~ MovieId+Ratings+Time,data=<name>) 

它给出了一个错误:

ERROR: cannot allocate 138.5MB vector . 

该文件的大小仅为 93MB。如何使用 R 进行回归并且没有记忆问题?我应该以不同的方式存储数据吗?

谢谢 。

更多信息:在具有 3GB RAM 的 linux 机器上工作。我已经用谷歌搜索了,但我得到的大多数链接都是关于通常> RAM 的数据集,在我的情况下这不是真的:((只有 93MB)。

4

3 回答 3

8

biglm是一个专门为将回归模型拟合到大型数据集而设计的软件包。

它通过逐块处理数据来工作。它所需的内存量是变量数量的函数,但不是观察数量的函数。

于 2011-07-13T13:01:38.043 回答
3

所需的模型矩阵与您的数据具有相同的行数,但其中的列数大致是唯一字符串的数量(因子级别)!

因此,如果您有 1000 部电影将生成大约 4e6x1000 的双打矩阵。大约是 32 GB...

您可以尝试像这样单独生成模型矩阵:

# Sample of 100 rows, 10 users, 20 movies
d <- data.frame(UserId = rep(paste('U', 10), each=10),
                MovieId=sample(paste('M', 1:20), 100, replace=T),
                Ratings=runif(100), Time=runif(100, 45, 180))
dim(d) # 100 x 4
m <- model.matrix(~ MovieId+Ratings+Time, data=d)
dim(m) # 100 x 21
于 2011-07-13T15:51:16.453 回答
1

该 R 错误消息不是指内存总量,而是指 R 尝试分配并失败的最后一个块。您可能想尝试分析内存使用情况(Monitor memory usage in R)以了解实际情况。

于 2013-03-18T13:45:12.790 回答