学习目标:
《自己动手做搜索引擎》
学习内容:
欧式距离
余弦距离
皮尔逊系数
Jaccard距离
学习时间:
1小时
学习产出:
笔记
构建一个基础的推荐系统
本节将使用相似用户给出的评级为Toby推荐他没有评级过的电影。有如下几个步骤:
1.抽取出Toby没有评级过的电影。
2.找到所有其他用户给这些电影的评级。
3.将所有用户(不包括Toby自己)对第一步中找到的电影的评级乘以与Toby的相似度。
4.计算每一部电影作品的评级和,并除以所有相似度之和。
library(reshape2)
library(data.table)
library(dplyr)
setwd("D:/RecommenderSystems_R-master")
data <- read.csv("movie_rating.csv",header = TRUE)
head(data)
#转成矩阵
movie_ratins = as.data.frame(acast(data,title~critic,
value.var="rating"))
View(movie_ratins)
#基于用户相似度,给用户推荐其未评级过的电影
#1用户相似度--相关系数
sim_users= cor(movie_ratins[,1:6],use="complete.obs")
View(sim_users)
#2选出用户未评级过的电影,以及其他用户对这些电影的评级,
这些评级分和相似度的乘积作为该部电影的评级分
rating_critic = setDT(movie_ratins[colnames(movie_ratins)[6]]
,keep.rownames = TRUE)[]
names(rating_critic) = c('title','rating')
View(rating_critic)
title_na_critic = rating_critic$title[is.na(rating_critic$rating)]
title_na_critic
#data loading
ratings = read.csv("movie_rating.csv")
ratings_t = ratings [ratings $title %in% title_na_critic,]
View(ratings_t)
x = (setDT(data.frame(sim_users[,6]),keep.rownames = TRUE)[])
names(x) = c('critic','similarity')
ratings_t = merge(x = ratings_t, y = x, by = "critic", all.x = TRUE)
ratings_t$sim_rating = ratings_t$rating*ratings_t$similarity
#predicting the non rated titles
result = ratings_t %>% group_by(title) %>% summarise(sum(sim_rating)/sum(similarity))
library(dplyr, warn.conflicts = FALSE)
# Suppress summarise info
options(dplyr.summarise.inform = FALSE)
基于近邻算法的推荐引擎
个性化推荐引擎
基于模型的推荐系统
混合推荐引擎