协同过滤
实现步骤
- 收集用户偏好
- 找到相似的用户或物品
- 计算推荐
相似度计算
欧几里得距离(Euclidean Distance)
皮尔逊相关系数(Pearson Correlation Coefficient)
Cosine相似度(Cosine Similarity)
皮尔逊相关系数(Pearson Correlation Coefficient)
协方差
皮尔逊相关系数
Pearson相关系数是用协方差除以两个变量的标准差得到的
标准差
邻居的选择
固定数量的邻居
基于相似度门槛的邻居
基于用户的协同过滤要解决的问题
已知用户评分矩阵Matrix R(一般都是非常稀疏的)
推断矩阵中空格empty cells处的值
UserCF存在的问题issues
对于一个新用户,很难找到邻居用户
对于一个物品,所有最近的邻居都在其上没有多少打分
基础解决方案
相似度计算最好使用皮尔逊相似度
考虑共同打分物品的数目,如乘上min(n,N)/ N n:共同打分数 N:制定阈值
对打分进行归一化处理
设置一个相似度阈值
基于用户的协同过滤为啥不流行
稀疏问题
数百万的用户计算,量太大!
人是善变的
基于物品的协同过滤优势
计算性能高,通常用户数量远大于物品数量
可预先计算保留,物品并不善变
用户冷启动问题
引导用户把自己的一些属性表达出来
利用现有的开放数据平台
根据用户注册属性
推荐排行榜单
物品冷启动问题
文本分析
主题模型
打标签
推荐排行榜单
基于用户的推荐 基于物品的推荐
实时新闻 图书
突然情况 电子商务
电影
隐语音模型
从数据出发,进行个性化推荐
用户和物品之间有着隐含的联系
隐含因子让计算机能理解就好
将用户和物品通过中介隐含银子联系起来
隐语义模型
梯度下降方向:
迭代求解:
隐语义模型负样本选择
对每个用户,要保证正负样本的平衡(数目相似)
选取那些很热门,而用户却没有行为的物品
对于用于——物品集K{(u,i)},其中如果(u,i)是正样本,则有rui = 1,负样本rui = 0
隐语义模型参数选择
隐特征的个数F,通常F=100
学习速率alpha,别太大
正则化参数lambda,别太大
负样本/正样本比例ratio
协同过滤VS隐语义
原理:协同过滤基于统计,隐语义基于建模
空间复杂度,隐语义模型较小
实时推荐依旧难,目前离线计算多
评估标准
准确度
召回率
令R(u)是根据用户在训练集上的行为给用户作出的推荐列表,T(u)是用户在测试集上的行为列表
覆盖率
多样性