大数据入门第十九天——推荐系统与mahout(一)入门与概述
一、推荐系统概述
为了解决信息过载和用户无明确需求的问题,找到用户感兴趣的物品,才有了个性化推荐系统。其实,解决信息过载的问题,代表性的解决方案是分类目录和搜索引擎,如hao123,电商首页的分类目录以及百度,360搜索等。不过分类目录和搜索引擎只能解决用户主动查找信息的需求,即用户知道自己想要什么,并不能解决用户没用明确需求很随便的问题。经典语录是:你想吃什么,随便!面对这种很随便又得罪不起的用户(女友和上帝),只能通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。比如问问女友的闺蜜,她一般什么时候喜欢吃什么。
更多推荐系统相关基础与介绍,参考:https://www.cnblogs.com/xing901022/p/6362295.html
https://zhuanlan.zhihu.com/p/26742879
更权威的资料,推荐相关的论文:期刊论文、硕士论文等!
二、mahout概述
1.mahout是什么?
Apache Mahout(TM) is a distributed linear algebra framework and mathematically expressive Scala DSL designed to let mathematicians, statisticians, and data scientists quickly implement their own algorithms. Apache Spark is the recommended out-of-the-box distributed back-end, or can be extended to other distributed backends.
- Mathematically Expressive Scala DSL
- Support for Multiple Distributed Backends (including Apache Spark)
- Modular Native Solvers for CPU/GPU/CUDA Acceleration
以上是从apache mahout官网引用的解释
使用简明的中文解释来说:
- Mahout是一个算法库,集成了很多算法。
- Apache Mahout 是 Apache Software Foundation(ASF)旗下的一个开源项目,
提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。- Mahout项目目前已经有了多个公共发行版本。Mahout包含许多实现,包括聚类、分类、推荐过滤、频繁子项挖掘。
- 通过使用 Apache Hadoop 库,Mahout 可以有效地扩展到Hadoop集群。
- Mahout 的创始人 Grant Ingersoll 介绍了机器学习的基本概念,并演示了如何使用 Mahout 来实现文档集群、提出建议和组织内容。
2.mahout能做什么?
1.推荐引擎
在目前采用的机器学习技术中,推荐引擎是最容易被一眼认出来的,也是应用范围最广的。服务商或网站会根据你过去的行为为你推荐书籍、电影或文章。
在部署了推荐系统的电子商务中,亚马逊大概是最有名的。亚马逊基于用户的交易行为和网站记录为你推荐你可能喜欢的商品。
而facebook这样的社交网络则利用推荐技术为你找到最可能尚未关联的朋友。
同时,这一技术也被各大知名国内网站所使用,如腾讯、人人、京东、淘宝。
2.聚类
顾名思义,物以类聚,人以群分。聚类是把具有共同属性的物品进行归类。
Google news使用聚类技术通过标题把新闻文章进行分组,从而按照逻辑线索来显示新闻,而并非给出所有新闻的原始列表。
3.分类
分类技术决定了一个事物多大程度上从属于某种类别或类型,或者多大程度上具有或者不具有某些属性。与聚类一样,分类无处不在,但更多隐身于幕后。通常这些系统会考察类别中的大量实例,来学习推到出分类的规则。
雅虎邮箱基于用户以前对正常右键和垃圾邮件的报告,以及电子右键自身的特征,来判别到来的消息是否是垃圾邮件。
3.推荐算法之协同过滤算法
Mahout使用了Taste来提高协同过滤算法的实现,它是一个基于Java实现的可扩展的,高效的推荐引擎。Taste既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法。同时,Taste不仅仅只适用于Java应用程序,它可以作为内部服务器的一个组件以HTTP和Web Service的形式向外界提供推荐的逻辑。Taste的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。
Taste主要包括以下几个接口:
l DataModel 是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste 默认提供 JDBCDataModel 和 FileDataModel,分别支持从数据库和文件中读取用户的喜好信息。
l UserSimilarity 和 ItemSimilarity 。UserSimilarity 用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的“邻居”,这里我们将与当前用户口味相似的用户称为他的邻居。ItemSimilarity 类似的,计算Item之间的相似度。
l UserNeighborhood 用于基于用户相似度的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的邻居用户的方式产生的。UserNeighborhood 定义了确定邻居用户的方法,具体实现一般是基于 UserSimilarity 计算得到的。
l Recommender 是推荐引擎的抽象接口,Taste 中的核心组件。程序中,为它提供一个 DataModel,它可以计算出对不同用户的推荐内容。实际应用中,主要使用它的实现类 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。
l RecommenderEvaluator :评分器。
l RecommenderIRStatsEvaluator :搜集推荐性能相关的指标,包括准确率、召回率等等。
三、mahout入门
使用mahout实现协同过滤算法(Java实现)
引入依赖:
下载评分数据
下载ratings.dat:http://grouplens.org/datasets/movielens/
基于用户的推荐:
- public class BaseUserRecommender {
- public static void main(String[] args) throws Exception {
- //准备数据 这里是电影评分数据
- File file = new File("E:\\itcast\\项目中心\\大数据课程研发\\大数据课程-参考资料\\推荐系统\\数据\\ml-10m\\ml-10M100K\\ratings.dat");
- //将数据加载到内存中,GroupLensDataModel是针对开放电影评论数据的
- DataModel dataModel = new GroupLensDataModel(file);
- //计算相似度,相似度算法有很多种,欧几里得、皮尔逊等等。
- UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel);
- //计算最近邻域,邻居有两种算法,基于固定数量的邻居和基于相似度的邻居,这里使用基于固定数量的邻居
- UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(100, similarity, dataModel);
- //构建推荐器,协同过滤推荐有两种,分别是基于用户的和基于物品的,这里使用基于用户的协同过滤推荐
- Recommender recommender = new GenericUserBasedRecommender(dataModel, userNeighborhood, similarity);
- //给用户ID等于5的用户推荐10部电影
- List<RecommendedItem> recommendedItemList = recommender.recommend(5, 10);
- //打印推荐的结果
- System.out.println("使用基于用户的协同过滤算法");
- System.out.println("为用户5推荐10个商品");
- for (RecommendedItem recommendedItem : recommendedItemList) {
- System.out.println(recommendedItem);
- }
- }
- }
推荐结果:
// 分别给出了推荐商品和推荐权重
基于物品的推荐
- public class BaseItemRecommender {
- public static void main(String[] args) throws Exception {
- //准备数据 这里是电影评分数据
- File file = new File("E:\\itcast\\项目中心\\大数据课程研发\\大数据课程-参考资料\\推荐系统\\数据\\ml-10m\\ml-10M100K\\ratings.dat");
- //将数据加载到内存中,GroupLensDataModel是针对开放电影评论数据的
- DataModel dataModel = new GroupLensDataModel(file);
- //计算相似度,相似度算法有很多种,欧几里得、皮尔逊等等。
- ItemSimilarity itemSimilarity = new PearsonCorrelationSimilarity(dataModel);
- //构建推荐器,协同过滤推荐有两种,分别是基于用户的和基于物品的,这里使用基于物品的协同过滤推荐
- GenericItemBasedRecommender recommender = new GenericItemBasedRecommender(dataModel, itemSimilarity);
- //给用户ID等于5的用户推荐10个与2398相似的商品
- List<RecommendedItem> recommendedItemList = recommender.recommendedBecause(5, 2398, 10);
- //打印推荐的结果
- System.out.println("使用基于物品的协同过滤算法");
- System.out.println("根据用户5当前浏览的商品2398,推荐10个相似的商品");
- for (RecommendedItem recommendedItem : recommendedItemList) {
- System.out.println(recommendedItem);
- }
- long start = System.currentTimeMillis();
- recommendedItemList = recommender.recommendedBecause(5, 34, 10);
- //打印推荐的结果
- System.out.println("使用基于物品的协同过滤算法");
- System.out.println("根据用户5当前浏览的商品2398,推荐10个相似的商品");
- for (RecommendedItem recommendedItem : recommendedItemList) {
- System.out.println(recommendedItem);
- }
- System.out.println(System.currentTimeMillis() -start);
- }
- }
推荐结果:
相关参考:https://yq.aliyun.com/articles/25466
大数据入门第十九天——推荐系统与mahout(一)入门与概述的更多相关文章
- 大数据入门第十六天——流式计算之storm详解(三)集群相关进阶
一.集群提交任务流程分析 1.集群提交操作 参考:https://www.jianshu.com/p/6783f1ec2da0 2.任务分配与启动流程 参考:https://www.cnblogs.c ...
- 大数据入门第十四天——Hbase详解(三)hbase基本原理与MR操作Hbase
一.基本原理 1.hbase的位置 上图描述了Hadoop 2.0生态系统中的各层结构.其中HBase位于结构化存储层,HDFS为HBase提供了高可靠性的底层存储支持, MapReduce为HBas ...
- 大数据入门第十四天——Hbase详解(一)入门与安装配置
一.概述 1.什么是Hbase 根据官网:https://hbase.apache.org/ Apache HBase™ is the Hadoop database, a distributed, ...
- 大数据入门第十六天——流式计算之storm详解(一)入门与集群安装
一.概述 今天起就正式进入了流式计算.这里先解释一下流式计算的概念 离线计算 离线计算:批量获取数据.批量传输数据.周期性批量计算数据.数据展示 代表技术:Sqoop批量导入数据.HDFS批量存储数据 ...
- 大数据入门第十四天——Hbase详解(二)基本概念与命令、javaAPI
一.hbase数据模型 完整的官方文档的翻译,参考:https://www.cnblogs.com/simple-focus/p/6198329.html 1.rowkey 与nosql数据库们一样, ...
- 大数据入门第十天——hadoop高可用HA
一.HA概述 1.引言 正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 2.运行机制 实现高可用最关键的是消除单点故障 hadoop-ha严格来说应该分成各个组件的HA机制——H ...
- 大数据入门第十六天——流式计算之storm详解(二)常用命令与wc实例
一.常用命令 1.提交命令 提交任务命令格式:storm jar [jar路径] [拓扑包名.拓扑类名] [拓扑名称] torm jar examples/storm-starter/storm-st ...
- 大数据入门第十五天——HBase整合:云笔记项目
一.功能简述 1.笔记本管理(增删改) 2.笔记管理 3.共享笔记查询功能 4.回收站 效果预览: 二.库表设计 1.设计理念 将云笔记信息分别存储在redis和hbase中. redis(缓存):存 ...
- 大数据入门第五天——离线计算之hadoop(上)概述与集群安装
一.概述 根据之前的凡技术必登其官网的原则,我们当然先得找到它的官网:http://hadoop.apache.org/ 1.什么是hadoop 先看官网介绍: The Apache™ Hadoop® ...
随机推荐
- soapUI 再谈SoapUI接口测试--文件组织与接口“布局”管理
再谈SoapUI接口测试--文件组织与接口“布局”管理 by:授客 QQ:1033553122 SoapUI-Pro-x64-5.1.2_576025(含破解文件),软件下载地址: http://pa ...
- MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解
MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解 by:授客 QQ:1033553122 1. unix_timestamp(date)将时间转换为时间戳,如果参数为空,则 ...
- 代码操作Word时,目录自动更新的两种方法
最近的项目中有一个功能点为:根据分析数据库并生成报告.不过不是大数据.数据挖掘之类,报告的内容.组织方式都是事先固定下来的.实现的方式为,在普通word文档中插入书签制成模板,然后程序使用OpenXM ...
- Android友盟增量更新
1.增量升级的原理 增量更新的原理就是将本地apk与服务器端最新版本比对,并得到差异包.比如现在的版本是1.1.4,大小是7.2M,新版本是1.1.5.大小是7.3M.我们发现两个版本只有0.1M的差 ...
- react native中Unable to load script from assets 'index.android.bundle'解决方案
刚刚朋友问我,说是创建好一个项目,运行后报错:Unable to load script from assets 'index.android.bundle',以前好好的没出现这种现象,于是我找到一个 ...
- LeetCode题解之Split Linked List in Parts
1.题目描述 2.题目分析 主要是理解题意,将每个子链表应该分得的节点个数计算清楚.利用除数和余数的方法进行计算. 3.代码 vector<ListNode*> splitListToPa ...
- PHP检查当前数组为几维数组
本文出至:新太潮流网络博客 /** * [TestArray 检测数组是一维还是二维] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB ...
- 在web中如何调整上传过的图片方向 (exif)
前提: 相机中拍的照片放到web上不会自动识别方向,如有些竖向显示的照片放到web上横向显示.这些照片在windows上是正确显示的.但是web不会自动旋转照片到正确方向.下面我们通过两种方法来实现这 ...
- 使用 PowerShell 创建 Azure VM 的自定义映像
自定义映像类似于应用商店映像,不同的是自定义映像的创建者是你自己. 自定义映像可用于启动配置,例如预加载应用程序.应用程序配置和其他 OS 配置. 在本教程中,你将创建自己的 Azure 虚拟机自定义 ...
- android的hwc浅析【转】
https://blog.csdn.net/alien75/article/details/39290109 注:本文档基于kk进行分析,着重于概念的精确定义和版本历史演变 一.关于hwc的介绍 广义 ...