目前为止都是在讨论 TopNTopNTopN 推荐,即给定一个用户,如何给他生成一个长度为 NNN 的推荐列表,使该推荐列表能够尽量满足用户的兴趣和需求。本书之所以如此重视 TopNTopNTopN 推荐,是因为它非常接近于满足实际系统的需求,实际系统绝大多数情况下就是给用户提供一个包括N个物品的个性化推荐列表。
但是,很多从事推荐系统研究的童鞋最早接触的却是评分预测问题,评分预测问题一直是推荐系统研究的核心。评分预测问题最基本的数据集就是用户评分数据集。该数据集由用户评分记录组成,每一条评分记录是一个三元组 (u,i,r)(u,i, r)(u,i,r),表示用户 uuu 给物品 iii 赋予了评分 rrr,本章用 ruir_{ui}rui 表示用户 uuu 对物品i的评分。因为用户不可能对所有物品都评分,因此评分预测问题就是如何通过已知的用户历史评分记录预测未知的用户评分记录。
- 平均预测算法
最简单的评分预测算法,就是使用平均值的方法,下面会讲讲各种平均值的使用:
- 全局平均值
在平均值里最简单的是全局平均值。它的定义为训练集中所有评分记录的评分平均值:
μ = ∑(u,i)∈Trainrui∑(u,i)∈Train1\mu {\text{ = }}\frac{ {\sum\nolimits_{(u,i) \in Train} { {r_{ui}}} }}{ {\sum\nolimits_{(u,i) \in Train} 1 }}μ = ∑(u,i)∈Train1∑(u,i)∈Trainrui - 用户评分平均值
用户 uuu 的评分平均值 ru‾\overline { {r_u}}ru 定义为用户 uuu 在训练集中所有评分的平均值:
ru‾=∑i∈N(u)rui∑i∈N(u)1\overline { {r_u}} = \frac{ {\sum\nolimits_{i \in N(u)} { {r_{ui}}} }}{ {\sum\nolimits_{i \in N(u)} 1 }}ru=∑i∈N(u)1∑i∈N(u)rui - 物品评分平均值
物品 iii 的评分平均值 ri‾\overline { {r_i}}ri 定义为物品 iii 在训练集中所有评分的平均值:
ri‾=∑u∈N(i)rui∑u∈N(i)1\overline { {r_i}} = \frac{ {\sum\nolimits_{u \in N(i)} { {r_{ui}}} }}{ {\sum\nolimits_{u \in N(i)} 1 }}ri=∑u∈N(i)1∑u∈N(i)