1

Win10 内部版本 18363.836;R 版本 R-4.0.2;RStudio 版本 1.3.1093;CPU:英特尔 i7-7500U;物理内存:16GB;硬盘:500GB SSD

我正在研究Instacart Market Basket数据集。实验室 R 包构建推荐模型,我需要创建一个包含 customer_id 和 product_name 的矩阵以进行协作过滤。

加载数据后,我合并和过滤数据以准备训练集。

data_train = orders %>% 
  filter(eval_set=='train') %>% 
  left_join(order_products) %>%
  left_join(products) %>%
  mutate(actual=1) %>%
  select(user_id, order_id, product_id, product_name, actual)

我试图建立这样的矩阵。

data_train %>% 
  select(user_id, product_name) %>% 
  mutate(n=1)  %>%
  arrange(product_name) %>% 
  pivot_wider(names_from = "product_name", values_from = "n", values_fill=0)

但是得到了错误信息:</p>

错误无法分配给不存在的元素。x 位置 2、3、4、5、6 等不存在。i 只有 1 个元素。

我无法解决问题,所以我根据这篇文章尝试了另一种构建矩阵的方法:</p>

ratings_matrix <- train01 %>%
  select(user_id, product_name) %>% 
  mutate(value = 1) %>%
  spread(product_name, value, fill = 0) %>%
  select(-user_id) %>%
  as.matrix() %>%
  as("binaryRatingMatrix")
ratings_matrix

现在显示:</p>

错误:无法分配大小为 19.2 Gb 的向量

所以我通过以下方式扩展了内存限制:

memory.limit(50000)

然后我检查了我的系统,它显示所有驱动器的总页面文件 43377MB(作为虚拟内存),这远远超过 R 要求生成矩阵。但仍然收到相同的错误消息。

我还尝试将火车数据分成四份,只转换了其中的 25%,但仍然出现错误:

错误:无法分配大小为 3.2 Gb 的向量

这甚至远远低于我笔记本电脑上的可用物理内存。而且由于我需要对数据进行协同过滤,因此最好将矩阵生成为一个整体。谁能帮我找出我在编码上犯了什么样的错误,或者教我另一种生成矩阵的方法?谢谢。

4

0 回答 0