推荐系统的冷启动问题
-
推荐系统冷启动概念
-
⽤户冷启动:如何为新⽤户做个性化推荐
-
物品冷启动:如何将新物品推荐给⽤户(协同过滤)
-
系统冷启动:⽤户冷启动+物品冷启动
-
本质是推荐系统依赖历史数据,没有历史数据⽆法预测⽤户偏好
-
-
用户冷启动
-
1.收集⽤户特征
-
⽤户注册信息:性别、年龄、地域
-
设备信息:定位、⼿机型号、app列表
-
社交信息、推⼴素材、安装来源
-
-
2 引导用户填写兴趣
-
3 使用其它站点的行为数据, 例如腾讯视频&QQ音乐 今日头条&抖音
-
4 新老用户推荐策略的差异
-
新⽤户在冷启动阶段更倾向于热门排⾏榜,⽼⽤户会更加需要长尾推荐
-
Explore Exploit⼒度
-
使⽤单独的特征和模型预估
-
-
举例 性别与电视剧的关系
-
-
物品冷启动
-
给物品打标签
-
利用物品的内容信息,将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户。
-
-
系统冷启动
-
基于内容的推荐 系统早期
-
基于内容的推荐逐渐过渡到协同过滤
-
基于内容的推荐和协同过滤的推荐结果都计算出来 加权求和得到最终推荐结果
-
Model-Based 协同过滤算法
随着机器学习技术的逐渐发展与完善,推荐系统也逐渐运用机器学习的思想来进行推荐。将机器学习应用到推荐系统中的方案真是不胜枚举。以下对Model-Based CF算法做一个大致的分类:
-
基于分类算法、回归算法、聚类算法
-
基于矩阵分解的推荐
-
基于神经网络算法
-
基于图模型算法
接下来我们重点学习以下几种应用较多的方案:
-
基于K最近邻的协同过滤推荐
-
基于回归模型的协同过滤推荐
-
基于矩阵分解的协同过滤推荐
基于K最近邻的协同过滤推荐
基于K最近邻的协同过滤推荐其实本质上就是MemoryBased CF,只不过在选取近邻的时候,加上K最近邻的限制。
这里我们直接根据MemoryBased CF的代码实现
修改以下地方
class CollaborativeFiltering(object):
based = None
def __init__(self, k=40, rules=None, use_cache=False, standard=None):
'''
:param k: 取K个最近邻来进行预测
:param rules: 过滤规则,四选一,否则将抛异常:"unhot", "rated", ["unhot","rated"], None
:param use_cache: 相似度计算结果是否开启缓存
:param standard: 评分标准化方法,None表示不使用、mean表示均值中心化、zscore表示Z-Score标准化
'''
self.k = 40
self.rules = rules
self.use_cache = use_cache
self.standard = standard
修改所有的选取近邻的地方的代码,根据相似度来选取K个最近邻
similar_users = self.similar[uid].drop([uid]).dropna().sort_values(ascending=False)[:self.k]
similar_items = self.similar[iid].drop([iid]).dropna().sort_values(ascending=False)[:self.k]
但由于我们的原始数据较少,这里我们的KNN方法的效果会比纯粹的MemoryBasedCF要差