推荐系统初探

推荐系统样例:

  • 基于对用户兴趣的预测结果,为读者推荐新闻报道、短视频等。(如:今日头条)
  • 基于顾客过去的购物或商品搜索历史,为在线商店的顾客推荐他们可能要买的商品。(如:亚马逊)

长尾:实体店的货架空间有限,只能给顾客展示所有存在商品的很小一部分,而在线商店能展示任何可用商品
—— 在线销售商对于传统实体销售商的优势。 同样,也是由于长尾的存在,信息爆炸,人们无法看到所有的东西,推荐系统发挥作用。

推荐系统中,用户(user)对物品(item)的偏好信息通过效用矩阵(utility matrix)表示。信息的获取方式:

  • 用户对物品评级:商品评价、电影打分等
  • 根据用户的行为推理:观看、阅读、购买、添加购物车等

基于内容(Content-based)的推荐

推荐系统面临的一个问题就是如何在缺乏数据时给出好的推荐,这称为冷启动(cold-start)。

可以将推荐看成搜索,这就可能会使用所需要推荐的物品的属性,可以使用属性作为相似度计算所需的数据,这称为基于内容的推荐

基于内容的系统集中关注物品的属性。物品之间的相似度通过计算它们的属性之间的相似度来确定,需要为每个物品构造特征。举例如电影的明星、导演、年份、流派等。

基于协同过滤(collaborative filtering)的推荐系统

不是利用专家给出的属性来描述物品来计算相似度,转而利用用户对物品的意见来计算相似度。协同过滤不是关心物品的描述属性,而是按照许多用户的观点来计算相似度

相似度计算:见距离计算Blog

  • 相似度 = 1 / (1 + 欧式距离)
def eulidSim(inA, inB):
    return 1.0 / (1.0 + np.linalg.norm(inA - inB))
  • 皮尔逊相关系数(Pearson correlation)
def pearsonSim(inA, inB):
    if len(inA) < 3:
        return 1.0
    return 0.5 + 0.5 * np.corrcoef(inA, inB, rowvar=0)[0][1]
  • 余弦相似度(cosione similarity)
def cosineSim(inA, inB):
    return 0.5 + 0.5 * (float(np.dot(inA, inB)) / (np.linalg.norm(inA) * np.linalg.norm(inB)))

相似性度量的选择

  • 当您的数据受用户偏好/用户的不同评分尺度影响时,请使用皮尔逊相似度(适合矩阵中仅由0和1组成)
  • 如果数据稀疏,则使用余弦(许多额定值未定义)
  • 如果您的数据不稀疏并且属性值的大小很重要,请使用欧几里得(Euclidean)。
  • 建议使用调整后的余弦(Adjusted Cosine Similarity)进行基于商品的方法来调整用户偏好。
  • 进行相似度度量时,可以选择对数据进行舍入处理或者评分归一化(即将每个评分减去某个用户的平均评分值)

内存方法(Memory-based)

基于用户的协同过滤

通过用户对物品的偏好来计算用户之间的相似度(与某用户相似的用户所喜欢的项会推荐给该用户)。

基于物品的协同过滤

通过喜欢物品的用户来计算物品之间的相似度。

UserCF和ItemCF比较与选择:
基于物品的相似度计算的时间会随物品数量的增加而增加,基于用户的相似度计算的时间则会随用户数量的增加而增加。如果商品数目比较少,用户的数目很多,可能倾向于基于物品相似度的计算方法(大部分产品导向的推荐引擎)。

模型方法(Model-based)

利用矩阵分解(Matrix factorization)提高推荐的效果
SVD分解

SVD分解会降低程序的速度,SVD分解可以在程序调入时运行一次。在大型系统中,SVD每天运行一次或者其频率更低,并且还要离线运行。

SVD++算法

协同关系矩阵

  • (rua)UA ( r u a ) U ∏ A :每个元素 rua r u a 表示 u u a上的交互强度
  • 此矩阵的大多数元素为未知,推荐算法的目标就是预测这些位置上的强度值(对比:Topic Model)

minb(u,a)K(ruaμbubapTuqa)2+λ||||2 m i n b ∑ ( u , a ) ∈ K ( r u a − μ − b u − b a − p u T q a ) 2 + λ | | ⋅ | | 2

上式: μ μ 为全局偏置, bu b u 为u的偏差, ba b a a a 的偏差,pu u u 的描述,qa a a 的描述。

  • 矩阵分解方法,比SVD在处理未知元素上更合理,同时在矩阵稀疏时计算速度快
  • 无法直接处理新出现的u a a
  • 在Netflix电影推荐项目上取得了很好的效果
UV分解

Mn×m=Un×dVd×m

推荐系统的评价

通用的一个指标:均方根误差(Root-Mean-Square Error, RMSE)

《推荐系统实战》

《Machine Learning in Action》 P253 14.1.2

《Mining of Massive Datasets》 9 P227

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值