ICF和UCF
一、原理
ICF是基于物品的推荐(利用物品之间的相似度计算预测值)
UCF是基于用户的最近邻推荐
1.UCF
(1)输入:An×m的评分 (用户n,物品m)
(2)1.计算用户之间的相关系数person系数:(得到的值在-1~1之间,越接近1的越好)
得到与A用户近似的N个用户。
person系数的理解:在计算中不考虑平均值的差异使得用户间可以比较。
没有考虑两用户是否仅同时对很少的物品进行评分, 解决办法:重要性赋权
没考虑很多领域会存在一些所有人都喜爱的物品,让两个用户对争议的物品达到共识会比广受换烟的物品达到共识更有价值。 解决办法:对物品评分变换,降低对广受欢迎物品有相同看法的相对重要性,用方差权重因子
选择近邻: 用户相似度定义一个具体的阈值,或者讲规模大小限制为一个固定值,只考虑k个最邻近。
阈值过过高,邻近规模小;阈值过低,邻近规模不会明显降低。
2.欧几里得相似度
3.余弦相似度
Tanimoto相似度:
(3)再用得到用户来近似求解a中对物品p的缺失评分。
用户a对物品p的预测值:pred(a,p)
问题:
1.矩阵太稀疏
2.用户和物品量太大,计算机太大
3.对于新物品,没评分。
2.ICF(1)
(1)输入:An×m的评分 (用户n,物品m)
(2)计算两物品之间的关系,余弦相似度:(没考虑用户平均值差异)
改进版的余弦相似度:
或者:
(3)预测评分:pred(u,p) 与预测物品近邻的物品
数据预处理:
其想法是事先构建一个物品相似度矩阵,描述所有物品两两之间的相似度。在运行时,通过确定与p最相似的物品并计算u对这些邻近物品评分的加权总和来得到用户u对物品p的预测评分。近邻数量受限于当前用户评过分的物品个数。由于这样的物品数量一般都比较少,因此计算预测值可以在线上交互应用允许的短时间内完成。
N个物品得到的相似度的矩阵是An×n的 。但实际上项数会极低,而且还可以采取进一步的方法降低复杂度。可选的方案有,仅考虑那些与其他物品同时评分数最少的物品,或者对每个物品只记录有限的近邻。
ICF(2) Slope One
例子:
顾客吃过后,会有相关的星级评分。假设评分如下:
评分 可乐鸡翅 红烧肉
小明 4 5
小红 4 3
小伟 2 3
小芳 3 ?
问题:请猜测一下小芳可能会给“红烧肉”打多少分?
思路:把两道菜的平均差值求出来,可乐鸡翅减去红烧肉的平均偏差:[(4-5)+(4-3)+(2-3)]/3=-0.333。一个新客户比如小芳,只吃了可乐鸡翅评分为3分,那么可以猜测她对红烧肉的评分为:3-(-0.333)=3.333
这就是slope one 算法的基本思路,非常非常的简单。
算法:
Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个Item-Based 的协同过滤推荐算法。和其它类似算法相比, 它的最大优点在于算法很简单, 易于实现, 执行效率高, 同时推荐的准确性相对较高。
Slope One算法是基于不同物品之间的评分差的线性算法,预测用户对物品评分的个性化算法。主要两步:
Step1:计算物品之间的评分差的均值,记为物品间的评分偏差(两物品同时被评分);
Step2:根据物品间的评分偏差和用户的历史评分,预测用户对未评分的物品的评分。
Step3:将预测评分排序,取topN对应的物品推荐给用户。
举例:
假设有100个人对物品A和物品B打分了,R(AB)表示这100个人对A和B打分的平均偏差;有1000个人对物品