1分钟教你学会如何设置基于mahout的推荐系统?

概念介绍1.1 推荐系统​ 推荐系统是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。​ 随着电子商务规模的不断扩大,商品个数和种类快速增长,据数据联盟的统计,淘宝拥有8千万的商品,顾客需要花费大量的时间才能找到自己想买的商品。这种浏览大量无关的信息和产品过程无疑会使淹没在信息过载问题中的消费者不断流失。​ 为了解决这些问...
摘要由CSDN通过智能技术生成

概念介绍
1.1 推荐系统

​        推荐系统是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。
​        随着电子商务规模的不断扩大,商品个数和种类快速增长,据数据联盟的统计,淘宝拥有8千万的商品,顾客需要花费大量的时间才能找到自己想买的商品。这种浏览大量无关的信息和产品过程无疑会使淹没在信息过载问题中的消费者不断流失。
​        为了解决这些问题,个性化推荐系统应运而生。个性化推荐系统是建立在海量数据挖掘基础上的一种高级商务智能平台,以帮助电子商务网站为其顾客购物提供完全个性化的决策支持和信息服务。同时也可以提升下单转化率,为平台带来一定的收益。
目前比较成熟的案例有:
  • 亚马逊的猜你喜欢


京东的热门推荐

爱奇艺的猜你喜欢,qq好友推荐,相亲网站的用户推荐,招聘网站的职业推荐等等。

1.2 Mahout介绍

​        Mahout 是 Apache Software Foundation 旗下的一个开源的分布式机器学习算法的算法库,使用了Taste来提高协同过滤算法的实现,它是一个基于Java实现的可扩展的,高效的推荐引擎。提供一些可扩展的机器学习领域经典算法的实现,同时mahout也是一个强大的数据挖掘工具,旨在帮助开发人员更加方便快捷地创建智能应用程序。Taste不仅仅只适用于Java应用程序,它可以作为内部服务器的一个组件以HTTP和Web Service的形式向外界提供推荐的逻辑。Mahout另外一个大特点是具有基于hadoop的实现,可以把算法运行在hadoop之上,运用MapReduce模式大大提高算法处理能力。
Mahout包含了许多算法实现:
  • 聚类算法:K-means(K均值算法)、Canopy(Canopy聚类)、Hierarchical(层次聚类)等。
  • 分类算法:Logistic Regression(逻辑回归)、Bayesian(贝叶斯)、SVM(支持向量机)、Perceptron(感知器算法)等。
  • 回归算法:Locally Weighted Linear Regression(局部加权线性回归)等。
  • 计算相似性算法:Non-distributed recommenders(Non-distributed recommenders)、Non-distributed recommenders(欧几里得距离算法)、CosineMeasureSimilarity(余弦计算)、SpearmanCorrelationSimilarity(斯皮尔曼相关系数)
  • 推荐算法:GenericUserBasedRecommender(基于用户的推荐)、GenericItemBasedRecommender(基于内容的推荐)、SlopeOneRecommender(SlopeOne算法)、SVDRecommender (SVD算法)、TreeClusteringRecommender(树形聚类的推荐算法)。

推荐学习:

大咖带你玩转数据结构与算法
完整视频:http://yun.itheima.com/open/584.html?2012stt
配套资料:https://pan.baidu.com/s/1-Fc96JNAhWg2gs6Bt1LMiA 提取码:cpxq
 

2. 协同过滤实现过程

推荐系统一般包含以下几个步骤:

2.1 收集用户偏好数据

​        要从用户的行为和偏好中发现规律,并基于此给予推荐,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,通用的用户行为有评分,投票,转发,保存,书签,标记,评论,点击流,页面停留时间,是否购买等。以上行为常见的有两种组合方式:方式1:根据查询或者购买分组,给用户显示时,提示查看过该商品的用户还查看过什么什么商品,购买过该商品的用户还购买过什么什么商品。方式2:根据不同的行为加权,比如购买了该商品权重高,查看权重低。
偏好数据的来源一般有:
  • 数据库或者缓存:可以收集到用户的订单信息,购物车信息,关注,评论,收藏等信息,能直观的反应出用户的喜好数据。
  • 日志信息:通过flume组件收集用户从打开网站,浏览过什么商品,页面停留多久这些可以收集到用户点击流数据。
  • 第三方数据平台:与第三方平台合作拿到用户在其他平台的偏好数据。
下面是在数据库中通过sql对用户行为的一个偏好值简单计算示例 

2.2 数据减噪与归一处理

​        减噪的目的是去除误操作,归一的目的是通过加权操作,比如刚才的行为划分1234类,权重也是从0.1到0.4不等,这样就可以把各个行为数据统一在一定范围中,使得最终的喜好值更加精确。

2.3 算出相似的物品或者用户

​        常用的算法基于用户UserCF和基于内容ItemCF的推荐
  • UserCF:推荐和此用户相似的用户行为过的商品给该用户,比如,张三买过苹果、香蕉、橘子、梨等物品,李四只买过香蕉,王五买过香蕉、橘子、梨、火龙果。张三和李四相似度是1,张三和王五相似度是3。则基于UserCF则会给张三推荐相似度高的用户王五,产生行为过的商品火龙果给张三。
  • ItemCF:推荐和此用户历史上行为过商品的相似商品推荐给该用户,比如张三以前买过笔记本电脑,则基于ItemCF则会把和笔记本电脑相似度高的其他商品推荐给张三。
​        两者区别:UserCF本质是基于用户对物品的偏好找到相邻的用户,然后将邻居用户喜欢的推荐给当前用户,适用于用户较少的情况,如果用户比较多计算量太大,侧重于跟当前用户相似的其他用户的行为,ItemCF本质基于用户对物品的偏好找到相似的物品,然后依据用户的历史偏好。推荐相似的物品给他,适用于商品较少的情况,更偏向于用户的历史行为。

2.4 将相似商品推荐给用户

​        算法推荐出来id以后,在根据id查询出商品其他信息展示给用户。
3. 代码实现
3.1 数据准备
创建商品表
 
1
2
3
4
5
6
CREATE TABLE `tb_item` (
  `pid` bigint(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(2000) CHARACTER SET latin1 DEFAULT NULL,
  `types` varchar(2000) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=65134 DEFAULT CHARSET=utf8;
创建用户偏好表
 
1
2
3
4
5
6
7
8
CREATE TABLE `user_pianhao_data1` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `uid` bigint(11) DEFAULT NULL,
  `pid` bigint(11) DEFAULT NULL,
  `val` bigint(11) DEFAULT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;
表中测试数据较多,可在网盘下载数据进行初始化链接:https://pan.baidu.com/s/1VSgD2uiJ69zDsw-KCtfEUQ

3.2 搭建springboot工程

 


3.3 编写application.properties配置文件

 
01
02
03
04
05
06
07
08
09
10
11
#DB Configuration:
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource. url = jdbc : mysql : / / 127.0 . 0.1 : 3306 / recommend?useUnicode = true & characterEncoding = utf 8
spring.datasource.username = root
spring.datasource. password = 123456
 
#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type - aliases - package = cn.itcast.domain
#加载Mybatis映射文件
mybatis.mapper - locations = classpath : mapper / * Mapper.xml

3.4 编写domain实体类
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package cn.itcast.domain;
  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值