|
box::use( |
|
recommenderlab[predict], |
|
methods[as], |
|
dplyr[select] |
|
) |
|
|
|
|
|
SVD_predict <- function(books_tab, selected_ids, ratings_tab, SVD_model, select_user_mat, how_many) { |
|
found_ids <- selected_ids[selected_ids %in% colnames(ratings_tab)] |
|
if (length(found_ids) == 0) { |
|
return(NULL) |
|
} |
|
ratings_line <- ratings_tab[1,] |
|
ratings_line[] <- NA |
|
ratings_line[found_ids] <- 5 |
|
|
|
select_user_mat <- as.matrix(ratings_line) |
|
select_user_mat <- as(select_user_mat, 'realRatingMatrix') |
|
|
|
predict_SVDF <- predict(SVD_model, |
|
select_user_mat, |
|
type = "topNList", |
|
n = how_many |
|
) |
|
|
|
|
|
predict_SVDF_list <- as(predict_SVDF, 'list') |
|
predict_SVDF_list <- lapply(predict_SVDF_list, as.numeric) |
|
predict_SVDF_df <- as.data.frame(predict_SVDF_list) |
|
names(predict_SVDF_df) <- "book_id" |
|
|
|
recommendations_SVDF <- merge(predict_SVDF_df, books_tab, by = "book_id") |
|
recommendations_tab <- recommendations_SVDF |> select( |
|
title, average_rating, description, url, image_url, genres, author_name |
|
) |
|
recommendations_tab$model <- "SVD" |
|
return(recommendations_tab) |
|
|
|
} |
|
|