目录
1 协同过滤算法
1.1 CF与 User/Item 推荐算法区别
基于用户内容的推荐:利用用户人口统计学特征(age/gender/..)计算相似度
基于物品内容的推荐:利用物品的本身属性内容计算相似度
CF:通过分析用户的行为数据,根据用户对物品的偏好发现用户和物品的相关性,基于这种关联推荐(userCF/item/CF)
1.2 UserCF
a 找到与目标用户兴趣相似的用户集合
相似度计算 (Jaccard公式、余弦相似度)
相似度改进,惩罚热门物品(对冷门物品的相同喜爱,更能表明两个人相似)
但是,如果计算目标用户与所有用户的相似度,复杂度太高O(u*u),实际上很多用户并没有与其有相同的感兴趣物品。
建立物品-用户倒排表(统计每一件物品对应的用户集合),遍历找到N(u)&N(v)不为零的,两两用户的相似度值C[u][v]+1,再除以分母。C[u][v]=N,表示用户u与v共有的爱好物品数量为N个。
b 找到该集合中所有用户喜欢的物品,然后排除目标用户已经看过的物品,推荐排在前n的物品
计算感兴趣度: ,其中wuv表示用户u和v的相似度,rvi表示用户v对物品i的兴趣度
1.3 ItemCF
原理同userCF,先计算物品的相似度(被喜欢的人越多越相似),然后生成推荐列表
相似度计算:
,N(i)表示喜欢i物品的用户数量
改进:惩罚热门物品,利于挖掘长尾物品
建立用户--物品倒排表(统计每一个用户对应的物品列表)
兴趣度:
,S(j,K)是和物品j最相似的K个物品集合,wji是物品j和i的相似度,rui是用户u对i的兴趣度
2 评价指标
,,
recall: 预测准确的占真实列表的比例
precision:预测正确的占预测集合的比例
coverage:预测的物品类别占总类别的比例
还有一些其他的评价指标:
用户满意度(无法离线测量:在线或用户调查)、多样性、新颖性、精细度、信任度、实时性、健壮性...
3 基于userCF与itemCF电影推荐
3.1 MovieLens数据集
MovieLens数据集(Small: 100,000 ratings and 3,600 tag applications applied to 9,000 movies by 600 users. )
userid/ movieid/ ratings/ timestrap,这里忽略时间戳,只利用前三个特征构造用户行为矩阵。
这里只预测目标用户的可能会进行评分的电影,不涉及评分高低,所以感兴趣度计算公式rank[movie] += wuv*rvi,rvi置为1,忽略评分高低的影响。
3.2 userCF代码实现
# coding = utf-8
# userCF推荐算法实现
import random
import math
from operator import itemgetter
class UserB