协同过滤-Collaborative filtering
一、协同过滤
协同过滤一般是在海量用户中发掘出一部分与目标用户特征比较类似的,在协同过滤中,这些用户与目标用户成为邻居,然后依据他们喜欢的其他东西组织成一个排序的目录推荐给目标用户
协同过滤要考虑:1.如何确定一个用户和目标用户相似;2.如何将邻居的喜好组织成一个排序目录
收集用户偏好:可通过用户行为判断偏好,如评分(传统星级评分制)、投票、转发、评论(用户情感)、点击、购买;同时也可对每个行为赋值,经过数据处理得到用户偏好
计算相似度:得到用户偏好后,可计算相似用户或物品,并进行推荐
基于用户的CF:通过用户对不同内容(物品)的行为,评测用户之间的相似度,找到“邻居”做出推荐,即给相似用户推荐其他用户喜欢的内容;依赖于当前用户相近用户群体的社会化行为,适用于用户量较少的场合(如果用户很多,计算用户的相似性矩阵代价较大),时效性强-用户个性化兴趣不太显著的场合,新加入的物品能很快进入推荐列表(一旦有用户对物品产生行为,就可将新物品推荐给和该用户兴趣相似的其他用户),可解释性弱,用户新的行为不一定导致推荐结果变化
基于物品的CF:基于用户对物品的偏好找到相似物品,然后根据用户历史偏好,推荐相似物品给用户。将所有用户对某个物品的偏好作为一个向量来计算物品间的相似度,并根据用户的历史偏好预测去预测当前用户还没有表示偏好的物品,最终计算得到一个排序的物品列表作为推荐;侧重于用户自身行为,适用于物品数较少(物品数明显少于用户数)的场合,长尾物品丰富-用户个性化需求强烈的场合,新加入用户能很快得到推荐(只要对一个物品产生行为),可解释性强,用户新的行为一定能导致推荐结果变化,但没有办法在不离线更新物品相似度表的情况下将新物品推荐给客户
二、Mahout协同过滤算法
Mahout是Hadoop家族用于机器学习的分布式计算框架,主要包括三类算法,即推荐算法、分类算法和聚类算法。Mahout推荐算法定义一套标准化的模型构建过程和调用过程,以基于用户的协同过滤算法为例;基于用户的协同过滤算法是被模块化的,通过4个模块进行统一的方法调用。首先创建数据模型,其次定义用户相似度算法(欧式距离相似度算法),接下来定义用户近邻算法(基于物品的协同过滤无此步骤),最后调用推荐算法完成计算过程
相似度算法:欧氏距离相似度、皮尔逊相似度、余弦相似度、spearman秩相关系数相似度、曼哈顿距离相似度、对数似然相似度
用户近邻算法:1.以个数计算,选出最近的前几个。2.以百分比计算,选出最近的前百分之几的数量
推荐算法:基于用户的推荐算法、基于物品的推荐算法、slopeone推荐算法、itemKNN推荐算法、SVD推荐算法、treecluster推荐算法
- 洛谷P2925 [USACO08DEC]干草出售Hay For Sale
- Numpy 修炼之道 (13)—— 将python函数向量化
- 洛谷P1887 乘积最大3
- 18.CSS
- R语言可视化——ggplot图表系统中的形状
- [机器学习Lesson 1 Introduction] 机器学习的动机与应用
- 洛谷P3377 【模板】左偏树(可并堆)
- Numpy 修炼之道 (12)—— genfromtxt函数
- 19.JavaScript
- 20.DOM
- 洛谷P3273 [SCOI2011]棘手的操作
- [机器学习Lesson 2]代价函数之线性回归算法
- Docker初尝试1.What is Docker?2.Try It3.Use It
- 洛谷P1456 Monkey King
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP 魔术方法、序列化与对象复制
- PHP 静态属性和静态方法
- 通过 Trait 水平扩展 PHP 类功能
- 通过对象组合水平扩展 PHP 类功能
- DO,DTO,VO,POJO 你知道吗?
- Python 爬虫进阶必备 | AES-CBC 的 Pyhon 实现要怎么写?给代码就完事了
- Babel:下一代Javascript语法编译器
- 如何定位及优化SQL语句的性能问题
- Java线程安全如何进行原子操作,一致性的最佳实践
- 冒泡排序
- 现有CDP-DC集群启用Auto-TLS
- 打卡001/这是一篇软文
- 技术角 | 在CentOS 8上使用Elastic Stack: Elasticsearch/Kibana 7.8部署与认证配置
- 技术角 | 解决ES SQL命令行启动报错 ./x-pack-env: No such file or directory
- Linux常用命令归类总结