推荐系统简介之一(itemCF算法)
推荐系统简介之一(itemCF算法)
习惯了今日头条、网易云音乐的推荐,对其背后的推荐原理产生了兴趣,大致了解了一下,主要利用用户上下文信息,比如注册信息、社交好友、时间地点、用户行为(购买、浏览记录等),来进行相关的分析。
目前比较流行的推荐算法有userCF、itemCF、SVD++等。
对于电商类网站,基于物品的协同过滤(item-based collaborative filtering)算法是目前业界应用最多的算法,如Amazon等。
itemCF思想:给用户推荐那些和他们之前喜欢的物品相似的物品。
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。
itemCF算法具体过程:
1、构建M*N矩阵,N为用户数,M为item数,矩阵中数值rji表示用户i对item j的打分项。
2、计算item i与item j的相似度,可以采用余弦相似度进行计算。

为增强数值范围的健壮性,通常对每个item的N个user的打分值进行归一化,即每个user的打分值减去该item项的平均打分值。
为避免未打分的user与item项影响,通常仅取矩阵中的item i与item j的公共用户的打分值进行相似度计算。
相似度计算时,矩阵中打分数据通常并不进行归一化操作,如下面代码所示,而是直接计算,这时公式需要变形为下式:

3、对用户x的待预测各item i,预测打分值,打分值按照最相似的topN个物品的加权打分和进行计算:

top N可以固定参数N,也可以设置门限,仅取相似度高于门限的参与计算。用movielens 100w数据集测试,N=10左右有较好效果。
这样就完成了预测,从而可以将预测打分值高于门限的item项推荐展示给用户。
下面代码来自于justdark/dml,添加了部分注释.
