推荐问题
- 推荐情报信息。情报源在不断的接受新数据,用户在不断从情报平台中搜索、查看数据,需要根据用户历史上经常看哪些情报,逐渐构建用户画像,当再次收到新的数据后,为用户挖掘出他可能最感兴趣的数据。
- 推荐情报产品。情报产品的数据比较固定(比如 F16的基本属性数据),而且种类也较少。根据用户历史查看频率、当前收到的情报内容等,为用户做出产品推荐。
因为当前因为数据问题,没有直接的用户使用历史记录,暂时处在算法研究阶段,因此使用豆瓣电影推荐数据集,作为实验数据集,与1部数据集有很大的相似之处,关键数据字段基本相同。
数据集
豆瓣数据集
movie: Movie_id Name Genres Storyline Tags
rating: Rating_id User_id Movie_id Rating Rating_time
1部数据
基础字段:标题 内容 标签 所属分类
交互数据:浏览时长 点赞 评分 评论 下载 订阅 收藏
数据映射思路
将1部所收集的隐式反馈数据,通过函数映射到显示的评分数据:
算法思路
- 基于物品相似度的方法
- 基于时间序列的推荐,构建用户画像,计算用户对物品的预估评分,然后推荐Top-K的数据
基于物品相似度的方法
- 整理数据集,获得每个用户的评分记录,按照时间顺序排列
- 将电影向量化表示。使用 gensim提供的word2vec方法,将文本向量化,并使用PCA进行降维。 name 用10维表示,storyline 用50维表示,tags 用10维表示
- 划分数据集,并构造测试集。构造推荐单元,将每个用户观看的前20部电影(评分大于等于4分的),作为用户的先验数据,将后面的电影(得分大于等于4分的),混合其他19部电影,作为候选池
- 建立相似度计算模型
- 进行推荐实验,评估Top-K的实验结果,寻找合适的K值,并分配name、storyline、tags这三部分的权重占比。
优点:
- 这个方法就是计算物品的相似度,推荐出来相似度最高的物品。是常用的推荐方法,基于固定数学公式的计算,推荐效率较高,相比较来说,易于实现。
缺点:
- 推荐效果对word2vec表示后的向量有一定的依赖。但如果基于标签自行构建one-hot向量表示,工作量大,而且降维处理和gensim内部的方法也是类似的。
基于时间序列的推荐
- 整理数据集,获得每个用户的评分记录,按照时间顺序排列
- 将电影向量化表示。使用 gensim提供的word2vec方法,将文本向量化,并使用PCA进行降维。 name 用10维表示,storyline 用50维表示,tags 用10维表示
- 划分数据集,并构造测试集。构造推荐单元,将每个用户观看的前20部电影(评分大于等于4分的),作为用户的先验数据,将后面的电影(得分大于等于4分的),混合其他19部电影,作为候选池
- 计算模型
预估评分:
其中:
用户偏好的矩阵描述就是 A
使用logistics回归,loss函数为: