推荐
终于找到好文章了!!!
可以给两个脚本定时执行,来处理打点数据,来完成对用户的推荐。
dt-recommend 中 Trainer 是保存数据的地方.
Trainer:
- 找到打点数据(打点数据放在 hbase 中, 取出其中的 userid,feedid,feedtype 等)
- 通过spark.mllib库调用一个 ALS(最小二乘法)算法, 得到一个 model
- 从这个 model 中得到 userFeatures, productFeatures(对应user, feed. 这时两个特征矩阵,具体的还得看ALS是什么).
- 保存 model, 放到hadoop? 分两个文件夹 matadata(className, formatversion, rank), data(user, product)
- 开始推荐, 推荐时就是计算 userid , feeid ,score. 其中 score 是一个打分, score 越高, 说明越应该给用户推荐这个 feed.
其中有一个 ddot 是个 java 程序, 用来计算特征向量的, 计算用户和 feed 的特征向量得到一个 score.
协同过滤
概念
rating:
记录一个矩阵, 每一行代表一个用户, 每一列是一个 item(product).
隐式反馈 显式反馈:
比如对电影的评分, 属于显式
比如用户的点击,评论, 收藏等, 属于隐式
代码
val model = ALS.*trainImplicit*(clickEvents, rank, iterations, lambda, blockSize, alpha)
**
clickEvents 就是 rating, 我的理解 rating 就是行为用户,列为 item, 值为评分的矩阵.
这个 trainImplicit 方法是隐式反馈要调用的.
对 rating 进行矩阵分解, 矩阵分解有种方法, 这里就是 ALS 方法进行矩阵分解.
关于 spark mllib 库的讲解:
mllib 库中只提供了基于矩阵分解的协同过滤算法.
还有一片比较容易懂的:
mllib 使用 ASL 对 rating 矩阵进行分解, 得到 user 和 product 矩阵.
user 特征向量 和 product 特征向量 点积, 可以得到每个用户对于该 feed 的推荐值
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/195908.html