Java教程
推荐系统 --- 推荐算法 --- 基于用户行为的推荐算法 - 协同过滤算法
本文主要是介绍推荐系统 --- 推荐算法 --- 基于用户行为的推荐算法 - 协同过滤算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述
历史
1992年,Goldberg、Nicols、Oki及Terry提出
基本思想
爱好相似的用户喜欢的东西可能也会喜欢
优点
共享朋友的经验,提高推荐的准确度
根据爱好相似的用户喜欢的视频进行推荐,可以发现用户潜在的兴趣
缺点
数据冷启动
不对视频的内容做分析,无法依据深层特征和属性来推荐比较复杂的视频
用户打分稀疏性问题的约束
随着用户和视频数量的增大、系统计算量的增大,收到算法可扩展性问题的约束
推荐算法分类
基于记忆的推荐算法
概述
直接使用整个已知的评分矩阵去预测用户对未知项目的评分或者推荐
算法
KNN 算法
基于用户
概述
与目标用户有相似偏好的用户群
将该群体评分高的视频推荐给目标用户
步骤
收集用户和视频的历史信息,计算用户和其他用户的相似度,找到与目标用户相似度高的用户集合
根据所有对视频的评分情况,选出N(u)中的用户喜欢的且目标用户没有看过的视频推荐给目标用户
基于物品
概述
维护视频间的相似度矩阵
将目标用户评分高的视频相似的视频,推荐给目标用户
步骤
通过相似度计算,寻找与视频M相似度较高的视频集合
根据所有对视频的评分情况,选出N(u)中的用户喜欢的且目标用户没有看过的视频推荐给目标用户
基于模型的推荐算法
概述
使用了机器学习中的模型和算法
基于隐因子模型的推荐算法
算法原理
基于用户的历史行为,挖掘用户隐含的兴趣,即隐因子
将用户或视频用隐因子来分类
通过这些隐因子进行推荐
基于朴素贝叶斯分类的推荐算法
算法原理
对于给出的待分类物品和既定的类别,计算该物品在各个类别中出现的概率
哪个类别计算出的概率最大就将待分类物品分到那个类别
基于用户的协同过滤算法
矩阵
用户 - 物品 的关系矩阵
算法流程
第⼀步,准备⽤户向量,从这个矩阵中,理论上可以给每⼀个⽤户得到⼀个向量。
向量有这么三个特点
向量的维度就是物品的个数;
向量是稀疏的,也就是说并不是每个维度上都有数值,原因当然很简单, 这个⽤户并不是消费过所有物品,废话嘛,连我们压箱底的都给⽤户推荐了, 那当然不⽤再推荐什么了;
向量维度上的取值可以是简单的 0 或者 1,也就是布尔值,1 表示喜欢 过,0 表示没有,当然因为是稀疏向量,所以取值为 0 的就忽略了。
第⼆步,⽤每⼀个⽤户的向量,两两计算⽤户之间的相似度,设定⼀个相似度 阈值或者设定⼀个最⼤数量,为每个⽤户保留与其最相似的⽤户。
第三步,为每⼀个⽤户产⽣推荐结果。
相似度计算
如果⽤户的向量很⻓,计算⼀个相似度则耗时很久
对向量采样计算。道理很简单,两个⼀百维的向量计算出的相似度是 0.7,我现在忍受⼀些精度的损失,不⽤ 100 维计算,随机从中取出 10 维计算,得到 相似度是 0.72,这个算法由 Twitter 提出,叫做 DIMSUM 算法,已经在 Spark 中实现了。
向量化计算。与其说这是⼀个⼩技巧,不如说这是⼀种思维⽅式。在机器学习 领域,向量之间的计算是家常便饭,难道向量计算都要⽤循环实现吗?并不是, 现代的线性代数库都⽀持直接的向量运算,⽐循环快很多。⼀般像常⽤的向量库都天然 ⽀持的,⽐如 Python 的 NumPy 。
如果⽤户量很⼤,⽽且通常如此,两两计算⽤户相似度也是⼀个⼤坑
第⼀个办法是:将相似度计算拆成 Map Reduce 任务,将原始矩阵 Map 成 键为⽤户对,值为两个⽤户对同⼀个物品的评分之积,Reduce 阶a段对这些乘 积再求和,Map Reduce 任务结束后再对这些值归⼀化;
第⼆个办法是:不⽤基于⽤户的协同过滤。
在计算推荐时,看上去要为每⼀个⽤户计算他和每⼀个物品的分数,⼜ 是⼀个⼤坑
只有相似⽤户喜欢过的物品需要计算,这个⼤⼤的赞,这个数量相⽐全 部物品少了很多;
把计算过程拆成 Map Reduce 任务。
改进思路
惩罚对热⻔门物品的喜欢程度,这是因为,热⻔门的东⻄西很难反应出⽤户的 真实兴趣,更可能是被煽动,或者⽆聊随便点击的情形,这是群体⾏为常⻅见特 点;
增加喜欢程度的时间衰减,⼀般使⽤⼀个指数函数,指数就是⼀个负数, 值和喜欢⾏为发⽣时间间隔正相关即可,这很好理解,⼩时候喜欢的东⻄西不代 表我现在的⼝味,⼈都是会变的,这是⼈性。
基于物品的协同过滤算法
矩阵
⽤户物品的关系矩阵,矩阵元素可以是⽤户的消费⾏为,也可以是 消费后的评价,还可以是对消费⾏为的某种量化如时间、次数、费⽤等;
历史
基于物品的协同过滤算法诞⽣于 1998 年,是由亚⻢马逊⾸先提出的,并在 2001 年由其发明者发表了相应的论⽂( Item-Based Collaborative Filtering Recommendation Algorithms )。
优点
⾸先,物品的数量,或者严格的说,可以推荐的物品数量往往少于⽤户数量; 所以⼀般计算物品之间的相似度就不会成为瓶颈。
其次,物品之间的相似度⽐较静态,它们变化的速度没有⽤户的⼝味变化快; 所以完全解耦了⽤户兴趣迁移这个问题。
最后,物品对应的消费者数量较⼤,对于计算物品之间的相似度稀疏度是好过 计算⽤户之间相似度的。
算法流程
构建⽤户物品的关系矩阵
假如矩阵的⾏表示物品,列表示⽤户的话,那么就两两计算⾏向量之间 的相似度,得到物品相似度矩阵,⾏和列都是物品;
相似度算法
改进方向
物品中⼼化。把矩阵中的分数,减去的是物品分数的均值;先计算每⼀个物 品收到评分的均值,然后再把物品向量中的分数减去对应物品的均值。
这样做 的⽬的是什么呢?去掉物品中铁杆粉丝群体的⾮理性因素,例如⼀个流量明星 的电影,其脑残粉可能会集体去打⾼分,那么⽤物品的均值来中⼼化就有⼀定 的抑制作⽤。
⽤户中⼼化。把矩阵中的分数,减去对应⽤户分数的均值;先计算每⼀个⽤ 户的评分均值,然后把他打过的所有分数都减去这个均值。
这样做的⽬的⼜是什么呢?每个⼈标准不⼀样,有的标准严苛,有的宽松,所 以减去⽤户的均值可以在⼀定程度上仅仅保留了偏好,去掉了主观成分。
产⽣推荐结果,根据推荐场景不同,有两种产⽣结果的形式。⼀种是为 某⼀个物品推荐相关物品,另⼀种是在个⼈⾸⻚页产⽣类似“猜你喜欢”的推荐结 果。
第⼀种属于 TopK 推荐,形式上也常常属于类似“猜你喜欢”这样的。
这个过程都是离线完成后,去掉那些⽤户已经消费过的,保留分数最⾼的 k 个 结果存储。当⽤户访问⾸⻚页时,直接查询出来即可。
第⼆种属于相关推荐,也就是我们今天专栏题⽬所指的场景。
这类推荐不需要提前合并计算,当⽤户访问⼀个物品的详情⻚页⾯时,或者完成 ⼀个物品消费的结果⾯,直接获取这个物品的相似物品推荐,就是“看了⼜看” 或者“买了⼜买”的推荐结果了。
具体算法
Slope One 算法
对比
基于用户的协同过滤算法
性能
适用于用户较少的场合,如果用户很多,计算用户 相似度矩阵代价很大
领域
时效性较强,用户个性化兴趣不太明显的领域
实时性
用户有新行为,不一定造成推荐结果的立即变化
冷启动
在新用户对很少的物品产生行为后,不能立即对他 进行个性化推荐,因为用户相似度表是每隔一段时 间离线计算的
新物品上线后一段时间,一旦有用户对物品产生行 为,就可以将新物品推荐给和对它产生行为的用户 兴趣相似的其他用户
推荐理由
很难提供令用户信服的推荐解释
基于物品的协同过滤算法
性能
适用于物品数明显小于用户数的场合,如果物品 很多(网页),计算物品相似度矩阵代价很大
领域
长尾物品丰富,用户个性化需求强烈的领域
实时性
用户有新行为,一定会导致推荐结果的实时变化
冷启动
新用户只要对一个物品产生行为,就可以给他推 荐和该物品相关的其他物品
但没有办法在不离线更新物品相似度表的情况 下将新物品推荐给用户
推荐理由
利用用户的历史行为给用户做推荐解释,可以令 用户比较信服
这篇关于推荐系统 --- 推荐算法 --- 基于用户行为的推荐算法 - 协同过滤算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
您可能喜欢
Java中定时任务实现方式及源码剖析
11-24
Java中定时任务实现方式及源码剖析
11-24
鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
11-24
细说敏捷:敏捷四会之每日站会
11-24
Springboot应用的多环境打包入门
11-23
Springboot应用的生产发布入门教程
11-23
Python编程入门指南
11-23
Java创业入门:从零开始的编程之旅
11-23
Java创业入门:新手必读的Java编程与创业指南
11-23
Java对接阿里云智能语音服务入门详解
11-23
Java对接阿里云智能语音服务入门教程
11-23
JAVA对接阿里云智能语音服务入门教程
11-23
Java副业入门:初学者的简单教程
11-23
JAVA副业入门:初学者的实战指南
11-23
JAVA项目部署入门:新手必读指南
11-23
栏目导航
前端开发
HTML5教程
CSS教程
Javascript
jQuery教程
AJAX教程
Node.js教程
XML教程
正则表达式
后端开发
Go教程
C/C++教程
消息队列MQ
Net Core教程
Asp.net教程
Java教程
PHP教程
移动端开发
微信公众号开发
小程序开发
Swift教程
IOS教程
Kotlin教程
Android开发
数据库
Redis教程
MongoDB教程
PostgreSQL教程
Oracle教程
MariaDB教程
SqLite教程
MySql教程
SqlServer教程
服务器运维
Kubernetes
Docker容器
linux shell
Nginx教程
网站安全
PowerShell教程
Linux教程
人工智能
TensorFlow教程
Python教程
机器学习
人工智能学习
区块链
区块链技术
游戏开发
游戏编程
Unity3D教程
网站运营
网站策划
网站优化
建站知识
大数据/云计算
云计算
Hadoop教程
软件工程
软件/开发工具使用
Git教程
资讯