基于内存,基于模型的协同过滤
https://www.zhihu.com/question/23838165
主要讲协同过滤,基于内存的(推相似用户喜欢的,或者退喜欢用户相似的),基于模型的(直接算这个大矩阵)
让我想到了技术栈的构建:正排:技术/知识/理论:场景1=边界1,场景2=边界2,对于这个技术/知识/理论理解的越深,对应的场景和边界对越多,其实心里会自动维持一个倒排,当发现某个场景或者问题的时候,去查这个倒排,找到对应的解决方案
而对于技术/知识/理论的理解层次:tutorial(兴趣)-> feature(核心和场景)-> API(全面使用)-> 源码(扩展)
1 基于用户的协同过滤算法
- 解决用户向量稀疏
稀疏编码方式 - 解决用户复杂度比较
以采样算法来计算,DIMSUM2 - 调整
惩罚热门物品的喜欢程度
增加喜欢程度的时间衰减(喜欢的程度跟时间衰减相关)
对用户(用户记录比较少)相似度做平滑
2 基于物品的协同过滤算法
- 用户协同过滤的问题
用户多,算起来慢
用户品味变化快
用户与用户的共同消费行为会比较少,一般都是热门物品 - 怎么解决
物品远远少于用户数量,计算物品直接相似度比较容易,物品直接相似度也比较不易改变
物品对应的消费者数量较大,计算出来的物品相似度比用户相似度更可靠 - 具体算法
构建用户物品矩阵,矩阵元素为消费行为或者评分
计算物品相似度(只计算两个物品的公共用户就行),物品维度中心化物品减去物品向量平均值减少特殊粉丝群体刷分,用户维度中心化矩阵元素减去用户向量的平均值
使用TopK和相关推荐
求余弦相似度 - slope 适用于评分矩阵
相似度置信问题,两个物品评分太少比如只有1个用户共同喜欢,算评分的时候,要把共同评分人数权重加上去
3 相似度算法
- 本质
如果两个物体很近,会产生相似的动作
有近邻(协同过滤)方法和模型(机器学习)方法 - 相似度算法
欧式距离,是一个绝对值,加1取倒数是0-1的相似度,一般是客观值
余弦相似度,角度问题,为了解决长度问题(增加减上均值的操作)
皮尔逊相关系数,为了计算趋势向量的余弦相似度
Jaccard相似度,布尔型向量 - 向量化计算
使用向量化工具快速计算向量间的计算方法