R从Sparklyr中的ALS实现中提取潜在因子

问题描述 投票:1回答:1

使用sparklyr文档中的ALS示例:

library(sparklyr)
sc <- spark_connect(master = "local")

movies <- data.frame(
  user   = c(1, 2, 0, 1, 2, 0),
  item   = c(1, 1, 1, 2, 2, 0),
  rating = c(3, 1, 2, 4, 5, 4)
)
movies_tbl <- sdf_copy_to(sc, movies)

model <- ml_als(movies_tbl, rating ~ user + item)

然后您如何从模型中提取最终的潜在用户和项目因子?

r sparklyr matrix-factorization
1个回答
0
投票

最后以tidy(model)到那里。

这是一个更新的示例,其中包含3个用户和4个项目:

library(sparklyr)
sc <- spark_connect(master = "local")

# 3 users, 4 films:
movies <- data.frame(
  user   = c(1, 1, 1, 1, 2, 2, 3, 3, 3, 3),
  item   = c(1, 2, 3, 4, 1, 2, 1, 2, 3, 4),
  rating = c(3, 1, 2, 5, 1, 5, 1, 1, 5, 4)
)
movies_tbl <- sdf_copy_to(sc, movies, overwrite = TRUE)
movies_tbl <- sdf_copy_to(sc, movies)

model <- ml_als(movies_tbl, rating ~ user + item)

您可以使用以下方法提取用户和项目的潜在因素:

model_tidy <- tidy(model) %>% collect

# A tibble: 4 x 3
     id user_factors item_factors
  <int> <list>       <list>      
1     1 <list [10]>  <list [10]> 
2     3 <list [10]>  <list [10]> 
3     2 <list [10]>  <list [10]> 
4     4 <lgl [1]>    <list [10]> 

因此,对于用户或项目列表中不存在的ID,列表元素为<lgl[1}>

© www.soinside.com 2019 - 2024. All rights reserved.