//2015年5月3日
0.推荐系统来源
如何解决信息过载:
搜索引擎:被动,智能程度低
广播:信息找人,需要用户自己过滤
信息过滤:
推荐系统:相比信息过滤,并不把信息收集作为重点
分类:
基于内容(可离线计算,缓解冷启动,稀疏性,解决不了多媒体,语义级别不行,对用户兴趣建模)
协同过滤(解决了多媒体;潜在需求):
混合过滤(。。)
基于模型(SVD)
网络(二部图:热传导、物质扩散)
1.冷启动问题
新用户,新商品
转向了附加信息、用户个人信息、社会标签等
但只适合特定对象和环境,拓展和移植不方便
2.稀疏性
极度影响相似度计算的效果
收集隐式评分,缓解稀疏性问题;
填充、降维来缓解稀疏性(降维但在高维、稀疏下表现不好)(填充则利用相似性填充、机器学习算法、其他信息来源等)
基于内容的过滤可以缓解稀疏性
聚类(因为比较的项目少了,对于邻居用户多了)
在稀疏度不变情况下,提高推荐质量(用户相似度传递,来解决最近邻数少)
3.可拓展性
高维情况下计算相似度并找最近邻花费很多时间
而增加服务器,只能提供吞吐率,不能解决单个推荐的时间
用SVD改善最近邻算法(在类中进行寻找)
降维方法。但在高维、稀疏下表现不好
聚类方法:对用户、商品同时聚类,co-cluster(推荐的时候只需要在簇内比较)
离线模型:生成用户偏好模型,在线使用模型根据用户实时喜好信息进行预测。但推荐效果差
4.概念漂移
对相似度计算、评分预测过程产生影响
5.Top N推荐
排序问题
意义:指出电影推荐的目的是发现用户最可能感兴趣的但还没看的;而不是在用户看完后再去预测评分
如人们对《泰坦尼克》评分肯定高
5.矩阵分解
假设:存在项和用户一个较小的特征集合能确定大部分作用。(大部分用户只对小规模特征反应)
UV分解,防止过拟合加入正则项(岭回归)、交替下降法(固定一个,另一个为凸函数)
并行化梯度下降;
实现矩阵分解算法,重点在于矩阵乘法的实现(hadoop)
6.各种SVD
隐语义模型:通过中间一个model层来对term进行语义上的关联
基本SVD:
如何补全一个稀疏矩阵:对原始矩阵扰动较小;一般认为补全后矩阵的特征值和补全之前的特征值相差不大
缺点:需要首先对原始评分矩阵进行补全
最优化算法的SVD:
潜在因子模型(LFM):
更像UV分解
是矩阵分解的拓展
LFM改进在于只沿用了SVD语义分析的思想,不需要真正对原始矩阵进行原地分解。
P,Q是直接通过训练集中观察值针对一定目标函数进行优化算法得到的。LFM是一个机器学习算法
Asymmetric-SVD:
LFM的缺点在于需要学习的实验参数较多
相对显式地对用户进行参数建模,可以通过用户历史评分对用户进行描述
不同点在于P_u与用户耦合,而x与项目耦合;而用求和(x)表示用户
SVD++
r_ui=b_ui+q_i(p_u+求和(beta_j*y_j))
两层模型
第一层:偏好模型,用于描述用户、商品自身属性
第二层:矩阵分解,用于挖掘用户兴趣与项目属性之间的交互信息
matrix factorization,Non-negative matrix factorization在处理missvalue上比SVD好
SVD,MF都抗过拟合;用Regularzied kernel MF更加好
7.协同过滤
基于最近邻:保持了local的性质(不像SVD)
1.model-base好是因为latent factor;但用户体验上有一个新奇性问题
2.相比model-based,但也可以离线计算
3.较稳定;新用户,新商品。。。
三大组件:
1.规整化:Z-Score(考虑了异常评分)等
困难:如只评价好的用户,相对低不代表不满意;评分少,效果不好
2.计算相似性:最关键
用于过滤;用于计算权重
cosin最好(item-based)
3.选择邻居:对每个user保存N个最近用户,在里面选K个进行预测
advance in CF
评价,RMSE,小提高却大大改善;因为只要top k