2.7.2 推薦を行う

事前に用意した映画の類似度行列に基づいて、任意のユーザーに次に見るべき映画を推薦する。
ここで評価と類似度を乗算したものを類似度の合計で割るという計算をしているのだけど、これも納得がいかないので算術平均を使うことにする。
前述したように評者ごとの個人差を補正するなら相関係数を使うか、評者ごとに中心化した距離行列を使えばいいと思う。

# 任意のユーザーの評価と事前に用意した映画の類似度行列に基づいて、任意のユーザーに次に見るべき映画を推薦する関数。
# itemMatch  calculateSimilarItemsで作った映画の類似度行列
# user       任意のユーザーの評点ベクトル
getRecommendedItems <- function(itemMatch, user){
    x1 <- apply(as.matrix(itemMatch*user), 2, mean, na.rm=TRUE)
    x2 <- x1[is.na(user)]
    sort(x1[is.na(user)], decreasing=TRUE)
    }

使い方

# 先に類似度行列を用意しておく。
# 今回は評者ごとに中心化したユークリッド平方距離
itemsim <- calculateSimilarItems(critics, "euclidean.center")
getRecommendedItems(itemsim, Toby)
# 出力
#  Lady.in.the.Water The.Night.Listener       Just.My.Luck 
#          0.4350802          0.3957915          0.1825998