Recommnederlab - 从推荐者中提取相似性
Recommnederlab -Extract similarities from the recommender
我正在使用 recommenderlab 从 UBCF 和 IBCF 模型中获取推荐,一切似乎都运行良好(我得到了推荐,它们似乎很有意义)。我想解释为什么要生成每个推荐,所以我想了解用户 (UBCF) 和项目 (IBCF) 之间的相似性。
我是 IBCF 推荐人 我可以看到相似性存储在推荐人结构中 (aux_recommneder@model$sim) 但我不知道如何提取它们 properly.I 想选择一个特定的项目并获得前 x 个最相似的项目(用于构建推荐)。使用 UBCF 我想选择一个特定的用户并获得最相似的用户。
我的 IBCF 推荐结构如下:
> str(aux_recommender)
Formal class 'Recommender' [package "recommenderlab"] with 5 slots
..@ method : chr "IBCF"
..@ dataType: atomic [1:1] realRatingMatrix
.. ..- attr(*, "package")= chr "recommenderlab"
..@ ntrain : int 7106
..@ model :List of 9
.. ..$ description : chr "IBCF: Reduced similarity matrix"
.. ..$ sim :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
.. .. .. ..@ i : int [1:2644] 12 105 649 705 1207 1282 555 62 365 485 ...
.. .. .. ..@ p : int [1:1323] 0 6 6 7 7 7 7 12 13 13 ...
.. .. .. ..@ Dim : int [1:2] 1322 1322
.. .. .. ..@ Dimnames:List of 2
.. .. .. .. ..$ : chr [1:1322] "1" "19" "22" "41" ...
.. .. .. .. ..$ : chr [1:1322] "1" "19" "22" "41" ...
.. .. .. ..@ x : num [1:2644] 0.71 0.766 0.834 0.663 0.919 ...
.. .. .. ..@ factors : list()
.. ..$ k : num 2
.. ..$ method : chr "Pearson"
.. ..$ normalize : chr "Z-score"
.. ..$ normalize_sim_matrix: logi FALSE
.. ..$ alpha : num 0.5
.. ..$ na_as_zero : logi FALSE
.. ..$ minRating : num 2
..@ predict :function (model, newdata, n = 10, data = NULL, type = c("topNList", ratings"), ...)
在我的 UBCF 中,我什至无法发现相似之处存储在哪里(如果有的话)。
我的 UBCF 结构是:
> str(rec_ub)
Formal class 'Recommender' [package "recommenderlab"] with 5 slots
..@ method : chr "UBCF"
..@ dataType: atomic [1:1] realRatingMatrix
.. ..- attr(*, "package")= chr "recommenderlab"
..@ ntrain : int 7106
..@ model :List of 7
.. ..$ description: chr "UBCF-Real data: contains full or sample of data set"
.. ..$ data :Formal class 'realRatingMatrix' [package "recommenderlab"] with 2 slots
.. .. .. ..@ data :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
.. .. .. .. .. ..@ i : int [1:2103234] 0 1 2 3 4 5 6 7 8 9 ...
.. .. .. .. .. ..@ p : int [1:1323] 0 6908 8602 9037 9546 14311 17869 18006 23693 24432 ...
.. .. .. .. .. ..@ Dim : int [1:2] 7106 1322
.. .. .. .. .. ..@ Dimnames:List of 2
.. .. .. .. .. .. ..$ : chr [1:7106] "10034" "10042" "10048" "10069" ...
.. .. .. .. .. .. ..$ : chr [1:1322] "1" "19" "22" "41" ...
.. .. .. .. .. ..@ x : num [1:2103234] -0.371 0.465 -0.174 0.188 0.27 ...
.. .. .. .. .. ..@ factors : list()
.. .. .. ..@ normalize:List of 3
.. .. .. .. ..$ method : chr "Z-score"
.. .. .. .. ..$ row : logi TRUE
.. .. .. .. ..$ factors:List of 2
.. .. .. .. .. ..$ means: Named num [1:7106] 2.48 1.57 2.2 1.82 2.63 ...
.. .. .. .. .. .. ..- attr(*, "names")= chr [1:7106] "10034" "10042" "10048" "10069" ...
.. .. .. .. .. ..$ sds : Named num [1:7106] 1.287 0.928 1.134 0.934 1.377 ...
.. .. .. .. .. .. ..- attr(*, "names")= chr [1:7106] "10034" "10042" "10048" "10069" ...
.. ..$ method : chr "Pearson"
.. ..$ nn : num 2
.. ..$ sample : logi FALSE
.. ..$ normalize : chr "Z-score"
.. ..$ minRating : num 2
..@ predict :function (model, newdata, n = 10, data = NULL, type = c("topNList", "ratings"), ...)
我需要知道的是为什么,例如,项目 102 被推荐给用户 10034。在 IBCF 中,这应该是因为项目 102 与用户评价很高的其他项目相似(例如可以是项目 1如果我们考虑 2 个社区,则为 250)。我需要知道这些项目是什么吗?我怎么知道项目 102 是因为项目 1 和 250 而被推荐的?对于 UBCF 模型中的用户,我也需要同样的东西。
非常感谢您的帮助。
不确定是否为时已晚,但您可以使用以下代码确定 IBCF 相似度:
similarity <- as.matrix(aux_recommender@model$sim)
我正在使用 recommenderlab 从 UBCF 和 IBCF 模型中获取推荐,一切似乎都运行良好(我得到了推荐,它们似乎很有意义)。我想解释为什么要生成每个推荐,所以我想了解用户 (UBCF) 和项目 (IBCF) 之间的相似性。
我是 IBCF 推荐人 我可以看到相似性存储在推荐人结构中 (aux_recommneder@model$sim) 但我不知道如何提取它们 properly.I 想选择一个特定的项目并获得前 x 个最相似的项目(用于构建推荐)。使用 UBCF 我想选择一个特定的用户并获得最相似的用户。
我的 IBCF 推荐结构如下:
> str(aux_recommender)
Formal class 'Recommender' [package "recommenderlab"] with 5 slots
..@ method : chr "IBCF"
..@ dataType: atomic [1:1] realRatingMatrix
.. ..- attr(*, "package")= chr "recommenderlab"
..@ ntrain : int 7106
..@ model :List of 9
.. ..$ description : chr "IBCF: Reduced similarity matrix"
.. ..$ sim :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
.. .. .. ..@ i : int [1:2644] 12 105 649 705 1207 1282 555 62 365 485 ...
.. .. .. ..@ p : int [1:1323] 0 6 6 7 7 7 7 12 13 13 ...
.. .. .. ..@ Dim : int [1:2] 1322 1322
.. .. .. ..@ Dimnames:List of 2
.. .. .. .. ..$ : chr [1:1322] "1" "19" "22" "41" ...
.. .. .. .. ..$ : chr [1:1322] "1" "19" "22" "41" ...
.. .. .. ..@ x : num [1:2644] 0.71 0.766 0.834 0.663 0.919 ...
.. .. .. ..@ factors : list()
.. ..$ k : num 2
.. ..$ method : chr "Pearson"
.. ..$ normalize : chr "Z-score"
.. ..$ normalize_sim_matrix: logi FALSE
.. ..$ alpha : num 0.5
.. ..$ na_as_zero : logi FALSE
.. ..$ minRating : num 2
..@ predict :function (model, newdata, n = 10, data = NULL, type = c("topNList", ratings"), ...)
在我的 UBCF 中,我什至无法发现相似之处存储在哪里(如果有的话)。
我的 UBCF 结构是:
> str(rec_ub)
Formal class 'Recommender' [package "recommenderlab"] with 5 slots
..@ method : chr "UBCF"
..@ dataType: atomic [1:1] realRatingMatrix
.. ..- attr(*, "package")= chr "recommenderlab"
..@ ntrain : int 7106
..@ model :List of 7
.. ..$ description: chr "UBCF-Real data: contains full or sample of data set"
.. ..$ data :Formal class 'realRatingMatrix' [package "recommenderlab"] with 2 slots
.. .. .. ..@ data :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
.. .. .. .. .. ..@ i : int [1:2103234] 0 1 2 3 4 5 6 7 8 9 ...
.. .. .. .. .. ..@ p : int [1:1323] 0 6908 8602 9037 9546 14311 17869 18006 23693 24432 ...
.. .. .. .. .. ..@ Dim : int [1:2] 7106 1322
.. .. .. .. .. ..@ Dimnames:List of 2
.. .. .. .. .. .. ..$ : chr [1:7106] "10034" "10042" "10048" "10069" ...
.. .. .. .. .. .. ..$ : chr [1:1322] "1" "19" "22" "41" ...
.. .. .. .. .. ..@ x : num [1:2103234] -0.371 0.465 -0.174 0.188 0.27 ...
.. .. .. .. .. ..@ factors : list()
.. .. .. ..@ normalize:List of 3
.. .. .. .. ..$ method : chr "Z-score"
.. .. .. .. ..$ row : logi TRUE
.. .. .. .. ..$ factors:List of 2
.. .. .. .. .. ..$ means: Named num [1:7106] 2.48 1.57 2.2 1.82 2.63 ...
.. .. .. .. .. .. ..- attr(*, "names")= chr [1:7106] "10034" "10042" "10048" "10069" ...
.. .. .. .. .. ..$ sds : Named num [1:7106] 1.287 0.928 1.134 0.934 1.377 ...
.. .. .. .. .. .. ..- attr(*, "names")= chr [1:7106] "10034" "10042" "10048" "10069" ...
.. ..$ method : chr "Pearson"
.. ..$ nn : num 2
.. ..$ sample : logi FALSE
.. ..$ normalize : chr "Z-score"
.. ..$ minRating : num 2
..@ predict :function (model, newdata, n = 10, data = NULL, type = c("topNList", "ratings"), ...)
我需要知道的是为什么,例如,项目 102 被推荐给用户 10034。在 IBCF 中,这应该是因为项目 102 与用户评价很高的其他项目相似(例如可以是项目 1如果我们考虑 2 个社区,则为 250)。我需要知道这些项目是什么吗?我怎么知道项目 102 是因为项目 1 和 250 而被推荐的?对于 UBCF 模型中的用户,我也需要同样的东西。
非常感谢您的帮助。
不确定是否为时已晚,但您可以使用以下代码确定 IBCF 相似度:
similarity <- as.matrix(aux_recommender@model$sim)