本文共 2221 字,大约阅读时间需要 7 分钟。
推荐系统样例:
长尾:实体店的货架空间有限,只能给顾客展示所有存在商品的很小一部分,而在线商店能展示任何可用商品
—— 在线销售商对于传统实体销售商的优势。 同样,也是由于长尾的存在,信息爆炸,人们无法看到所有的东西,推荐系统发挥作用。推荐系统中,用户(user)对物品(item)的偏好信息通过效用矩阵(utility matrix)表示。信息的获取方式:
推荐系统面临的一个问题就是如何在缺乏数据时给出好的推荐,这称为冷启动(cold-start)。
可以将推荐看成搜索,这就可能会使用所需要推荐的物品的属性,可以使用属性作为相似度计算所需的数据,这称为基于内容的推荐。
基于内容的系统集中关注物品的属性。物品之间的相似度通过计算它们的属性之间的相似度来确定,需要为每个物品构造特征。举例如电影的明星、导演、年份、流派等。
不是利用专家给出的属性来描述物品来计算相似度,转而利用用户对物品的意见来计算相似度。协同过滤不是关心物品的描述属性,而是按照许多用户的观点来计算相似度。
相似度计算:见距离计算Blog
def eulidSim(inA, inB): return 1.0 / (1.0 + np.linalg.norm(inA - inB))
def pearsonSim(inA, inB): if len(inA) < 3: return 1.0 return 0.5 + 0.5 * np.corrcoef(inA, inB, rowvar=0)[0][1]
def cosineSim(inA, inB): return 0.5 + 0.5 * (float(np.dot(inA, inB)) / (np.linalg.norm(inA) * np.linalg.norm(inB)))
相似性度量的选择:
通过用户对物品的偏好来计算用户之间的相似度(与某用户相似的用户所喜欢的项会推荐给该用户)。
通过喜欢物品的用户来计算物品之间的相似度。
UserCF和ItemCF比较与选择:
基于物品的相似度计算的时间会随物品数量的增加而增加,基于用户的相似度计算的时间则会随用户数量的增加而增加。如果商品数目比较少,用户的数目很多,可能倾向于基于物品相似度的计算方法(大部分产品导向的推荐引擎)。SVD分解会降低程序的速度,SVD分解可以在程序调入时运行一次。在大型系统中,SVD每天运行一次或者其频率更低,并且还要离线运行。
协同关系矩阵:
上式: μ μ 为全局偏置, bu b u 为u的偏差, ba b a 为 a a 的偏差, 为 u u 的描述, 为 a a 的描述。
通用的一个指标:均方根误差(Root-Mean-Square Error, RMSE)
《推荐系统实战》
《Machine Learning in Action》 P253 14.1.2
《Mining of Massive Datasets》 9 P227
转载地址:http://gioji.baihongyu.com/