Apache Mahout 使用简介

合集下载

mahout介绍

mahout介绍
Mahout
讲师:陈博
介绍Mahout
• 一个来自Apache的、开源的、JAVA的机器学习软件库 • 当所处理的数据规模远大于单机处理能力时成为一种可选的机
器学习工具,建立在Apache的Hadoop分布式计算项目之上
官网: /
机器学习
• 机器学习理论主要是设计和分析一些让计算机可以自动学习的 算法。
• 机器学习算法是一类从数据中自动分析获得规律,并利用规律 对未知数据进行预测的算法。
• 监督学习 分类(做出单一决策) 推荐(选择许多可能,并对其进行排序)
• 无监督学习聚类
Mahout单机推荐程序
• M2eclipse插件 /technology/m2e/releases
• 简单的基于用户的Mahout推荐程序
• 评估一个推荐程序
• 评估查准率与查全率 查准率(精度):top推荐中间有“好”结果的比例 查全率(召回率):“好”结果出现在top推荐中的比例
Mahout作业
• 把单机Mahout程序在eclipse中运行起来

利用Java开发人工智能应用程序

利用Java开发人工智能应用程序

利用Java开发人工智能应用程序在当今科技快速发展的时代,人工智能已经成为了各个领域的热门话题。

作为一门功能强大、多样化的编程语言,Java在人工智能应用程序的开发中发挥着重要的作用。

本文将探讨如何利用Java开发人工智能应用程序,并介绍一些相关的技术和工具。

一、人工智能简介人工智能(Artificial Intelligence,简称AI)是研究、开发以及使用用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门学科。

它涵盖了机器学习、深度学习、自然语言处理、计算机视觉、专家系统等众多领域。

二、Java与人工智能作为一门通用型编程语言,Java具有广泛的应用领域,包括Web开发、移动应用、大数据处理等。

而在人工智能领域,Java也展现出了它的强大之处。

1. 机器学习机器学习是人工智能的一个重要分支,它通过构建模型和算法,使计算机可以从数据中学习并进行预测和决策。

Java提供了多个机器学习库和框架,如Weka、DL4J和Weka。

开发者可以利用这些工具来实现各种机器学习算法,从而构建智能化的应用程序。

2. 自然语言处理自然语言处理是指计算机与人类自然语言之间的交互。

Java中有一些优秀的自然语言处理库,如Stanford NLP、OpenNLP和Lucene。

借助这些库,开发者可以在应用程序中实现文本分析、情感分析、机器翻译等功能。

3. 计算机视觉计算机视觉是指通过计算机对图像和视频进行分析和理解。

Java提供了开源库OpenCV,它是一个强大的计算机视觉库,可以帮助开发者实现图像识别、人脸识别、目标追踪等功能。

三、Java人工智能开发工具除了以上提到的一些库和框架,Java还有许多其他的工具可供开发人员使用,以便更好地开发人工智能应用程序。

1. Apache MahoutApache Mahout是一个Java开源的机器学习库,它提供了丰富的机器学习算法和工具。

开发人员可以利用Mahout来构建基于Java的强大机器学习应用程序。

基于协同过滤算法的电影推荐系统

基于协同过滤算法的电影推荐系统

高级数据挖掘期末大作业基于协同过滤算法的电影推荐系统基于协同过滤算法的电影推荐系统本电影推荐系统中运用的推荐算法是基于协同过滤算法(Collaborative Filtering Recommendation)。

协同过滤是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。

与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。

电影推荐系统中引用了Apache Mahout提供的一个协同过滤算法的推荐引擎Taste,它实现了最基本的基于用户和基于内容的推荐算法,并提供了扩展接口,使用户方便的定义和实现自己的推荐算法。

电影推荐系统是基于用户的推荐系统,即当用户对某些电影评分之后,系统根据用户对电影评分的分值,判断用户的兴趣,先运用UserSimilarity计算用户间的相似度.UserNeighborhood根据用户相似度找到与该用户口味相似的邻居,最后由Recommender提供推荐个该用户可能感兴趣的电影详细信息。

将用户评过分的电影信息和推荐给该用户的电影信息显示在网页结果页中,推荐完成。

一、Taste 介绍Taste是Apache Mahout 提供的一个个性化推荐引擎的高效实现,该引擎基于java实现,可扩展性强,同时在mahout中对一些推荐算法进行了MapReduce 编程模式转化,从而可以利用hadoop的分布式架构,提高推荐算法的性能。

在Mahout0.5版本中的Taste,实现了多种推荐算法,其中有最基本的基于用户的和基于内容的推荐算法,也有比较高效的SlopeOne算法,以及处于研究阶段的基于SVD和线性插值的算法,同时Taste还提供了扩展接口,用于定制化开发基于内容或基于模型的个性化推荐算法。

Taste 不仅仅适用于Java 应用程序,还可以作为内部服务器的一个组件以HTTP 和Web Service 的形式向外界提供推荐的逻辑。

Mahout文本向量化

Mahout文本向量化
frequency.file-0
单词id (org.apache.hadoop.io.IntWritable)
单词的文档频率(org.apache.
hadoop.io.LongWritable)
仍是文档频率,只是对df-count中的文件进行分块
tfidf-vectors
文档名(org.apache.hadoop.io.Text)
Mahout文本向量化
在文本聚类之前,首先要做的是文本的向量化。该过程涉及到分词,特征抽取,权重计算等等。Mahout提供了文本向量化工具。由于Mahout向量化算法要处理的文件是HadoopSequenceFile,需要将普通的文本文件转成SequenceFile格式,然后在向量化。
一、序列化
API
是否输出为namedVector
--logNormalize(-lnorm)(Optional)
输出结果向量取log
--stopWordsFile (-sw)
停用词词典文件路径
示例
String[] args ={"-i",”/seq”,
"-o",”/vec”
"-a",".smart
.SmartChineseAnalyzer",
"-md",4),
"-ow","-ng",4),
"-wt",”TFIDF”,
"-nr",4),
"-sw",”/stopwprds.txt”
};
SparseVectorsFromSequenceFiles.main(args);

Apache Hadoop入门第一步

Apache Hadoop入门第一步

Apache Hadoop入门(一)官方网站/1Apache Hadoop概述Apache Hadoop项目开发可靠的、可扩展的(Scalable)、分布式计算的开源软件。

Apache Hadoop软件库是一个框架,使用简单的编程模型,用于对跨计算机集群的大数据集进行分布式处理。

使用Apache Hadoop软件库,可以从单个服务器扩展到上千台服务器,每台服务器都提供本地的计算后存储。

Apache Hadoop软件库不再依赖于硬件实现高可用性,Apache Hadoop软件库可以检测并处理应用层的失效,从而在计算机集群之上提供高可用性服务。

2Apache Hadoop项目组成2.1Apache Hadoop包括的子项目Hadoop Common:支撑其他子项目的通用工具;Hadoop Common是一组支持Hadoop子项目的工具,包括FileSystem、RPC后序列化库。

HDFS:提供对应用数据的大吞吐量访问的分布式文件系统;HDFS是Hadoop应用使用的主要存储系统。

HDFS创建数据块的多个副本,并将其在整个集群内的计算节点上进行分布式存储,以支持可靠的、极其快速的计算。

Hadoop MapReduce:用于分布式处理计算机集群上的大数据集的软件框架;Hadoop MapReduce是一个编程模型后软件框架,用以编写在大规模计算节点的集群中并行快速处理大量数据的应用。

2.2其他相关项目Avro:数据序列化系统;Cassandra:可扩展的、多主(multi-master)的数据库,克服单点失效;Chukwa:管理大型分布式系统的数据集合系统;HBase:可扩展的、分布式的数据库,以大表实现对结构化数据的存储;Hive:数据仓库基础设施,提供数据汇总(data summarization)和自主查询(ad hoc querying);Mahout:可扩展的机器学习和数据挖掘库;Pig:用于并行计算的高层次数据流语言和执行框架ZooKeeper:用于分布式应用的高性能协调服务3快速启动3.1Single Node Setup3.1.1下载Hadoop 发布包3.1.2确保Ubuntu Linux已经安装了远程登录和远程镜像工具(默认没有安装)$ sudo apt-get install ssh$ sudo apt-get install rsync3.1.3设置JAVA_HOME环境变量打开conf/hadoop-env.sh文件,去掉注释,并给出正确的路径:export JAVA_HOME=/home/hanxb/Classes/jdk1.7.0_013.1.4执行hadoop/bin目录下的hadoop可执行文件./hadoop3.1.5H adoop初始化1无需修改conf目录下的任何XML配置文件,采用默认值即可;2格式化namenode[root@localhost hadoop-0.20.203.0]# ./bin/hadoop namenode –format 3启动HDFS和MapReduce[root@localhost hadoop-0.20.203.0]# ./bin/start-all.sh3.1.6启动第一个应用1创建输入文件目录bin/hadoop fs -mkdir input2复制文件到输入目录bin/hadoop fs -copyFromLocal conf/*.xml inputbin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'4查看处理的输出结果bin/hadoop fs -ls outputbin/hadoop fs -cat /user/hanxb/output/part-000004监控HDFS监控:http://localhost:50070http://localhost:50030/5遇到的错误hadoop localhost: ssh: connect to host localhost port 22: Connection refused未正确安装SSH[root@localhost hadoop-0.20.203.0]sudo apt-get install sshINFO ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000. Already tried 0 time(s). 涉及几个方面的问题:[root@localhost hadoop-0.20.203.0]# ./bin/hadoop namenode –format[root@localhost hadoop-0.20.203.0]# ./bin/start-all.sh。

Mahout简介

Mahout简介

Mahout简介2.执行过程:(以K-means为例)Mahout下处理的文件必须是SequenceFile格式的,所以需要把txtfile转换成sequenceFile。

Mahout中提供了一种将指定文件下的文件转换成SequenceFile的方式。

使用方法如下:$MAHOUT_HOME/bin/mahout seqdirectory \--input <PARENT DIR WHERE DOCS ARE LOCATED> --output <OUTPUT DIRECTORY> \<-c <CHARSET NAME OF THE INPUT DOCUMENTS> {UTF-8|cp1252|ascii...}> \<-chunk <MAX SIZE OF EACH CHUNK in Megabytes> 64> \<-prefix <PREFIX TO ADD TO THE DOCUMENT ID>>举个例子:bin/mahout seqdirectory --input /hive/hadoopuser/ --output /mahout/seq/ --charset UTF-8数据模型:Mahout聚类算法将对象以Vector的方式表示,它同时支持dense vector和sparse vector,一共有三种表示方式(它们拥有共同的基类AbstractVector,里面实现了有关Vector的很多操作):(1)、DenseVector位于mahout-math文件夹下的src/main/java中的package:org.apache.mahout.clustering.math中,它实现的时候用一个double数组表示Vector (private double[] values),对于dense data可以使用它;(2)、RandomAccessSparseVector位于mahout-math文件夹下的src/main/java中的package:org.apache.mahout.clustering.math中,它用来表示一个可以随机访问的sparse vector,只存储非零元素,数据的存储采用hash映射:OpenIntDoubleHashMap;(3)、SequentialAccessSparseVector位于mahout-math文件夹下的src/main/java中的package:org.apache.mahout.clustering.math中,它用来表示一个顺序访问的sparse vector,同样只存储非零元素,数据的存储采用顺序映射:OrderedIntDoubleMapping;首先,下载数据集synthetic_control.data,在以上官网上的Input data set. Download it here点击可下载,并将其导入到分布式文件系统上其次,使用k-means算法,在mahout的安装目录下直接bin/mahoutorg.apache.mahout.clustering.syntheticcontrol.kmeans.Job或是$HADOOP_HOME/bin/hadoop jar/home/hadoop/mahout-distribution-0.4/mahout-examples-0.4-job.jarorg.apache.mahout.clustering.syntheticcontrol.kmeans.Job结果分析:输出目录为data,clusters-0----clusters-9, clusteredPoints其中data目录下的数据集为对初始数据的预处理Clusters-0目录下的数据集为Canopy对初始数据的初始划分;clusteredPoints为最后结果集;结果查看:由于Mhout结果文件均为SequenceFile,需转换成txtFile文件保存到本地才能查看,例如想查看clusters-i中的 part-r-00000时,应该将其从分布式上导入到本地的txt格式(命令):./mahout seqdumper -s/user/hadoop/output/cluster-9/part-r-00000-o /home/hadoop/out/part-0其中key字段是类标号;value字段中n为类中点集数,c为中心点各属性均值,r为各属性半径;要查看最终结果需要两个信息:Cluster信息和Clustering data后点的信息,它们分别存储在HDFS的最后一次迭代目录output/clusters-9和聚类点目录output/clusteredPoints查看结果,将结果获取到本地,终端输入:bin/mahout clusterdump --seqFileDir /user/leozhang/output/clusters-9 --pointsDir/user/leozhang/output/clusteredPoints --output result.txt clusteredPoints目录下的数据集key为类标号,value为节点集;。

大数据平台简介(浪潮)

大数据平台简介
2
目录
一.Hadoop生态系统 二.Hadoop主流厂商
三.HDFS
四.MapReduce
五.Hive
六.Spark
3
Hadoop生态系统
Hadoop 1.0 V 2.0
4
Hadoop生态系统
5
Ambari
(安装部署工具)
Oozie
(作业流调度系统)
Sqoop
(数据库TEL 工具)
所以可以理解为hadoop是一个框架,HDFS是hadoop中的一个部件。
HDFS背景介绍
28
随着数据量越来越大, 在一个操作系统管辖的范围存不下了, 那 么就 分配到更多的操作系统管理的磁盘中, 但是不方便管理和维 护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文 件管理系统。
分布式文件系统:一种允许文件通过网络在多台主机上分享的文件 系统,可以让多个机器上的多个用户分享文件和存储空间。
HBase-NoSQL数据库
10
Hive-hadoop的数据仓库
11
Pig-大规模数据分析平台
12
Pig是一个基于Hadoop的大规模数据分析平台,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处
理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简单的
20
Hortonworks Data Platform (HDP)
21
MapR Converged Data Platform
22
Hadoop主流厂商比较
23
开源
开源
开源
管理 管理
完全开源 收取服务费

mahout使用入门

Mahout使用入门感谢:《使用mahout进行数据挖掘》/blog/804146一、简介Mahout 是Apache Software Foundation(ASF)旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。

Apache Mahout项目已经发展到了它的第三个年头,目前已经有了三个公共发行版本。

Mahout包含许多实现,包括集群、分类、推荐过滤、频繁子项挖掘。

此外,通过使用Apache Hadoop 库,Mahout 可以有效地扩展到云中。

二、下载与准备程序下载下载hadoop /apache-mirror/hadoop/common/下载适合版本的包(本文采用稳定版hadoop-0.20.203.0rc1.tar.gz )下载mahout /apache-mirror/mahout/(本文采用mahout-distribution-0.5.tar.gz)如需更多功能可能还需下载maven 和mahout-collections数据下载数据源:/databases/里面有大量经典数据提供下载(本文使用synthetic_control 数据,synthetic_control.tar.gz)三、安装与部署为了不污染Linux root环境,本文采用在个人Home目录安装程序,程序目录为$HOME/local。

程序已经下载到$HOME/Downloads,使用tar命令解压:tar zxvf hadoop-0.20.203.0rc1.tar.gz -C ~/local/cd ~/localmv hadoop-0.20.203.0 hadooptar zxvf mahout-distribution-0.5.tar.gz -C ~/local/cd ~/localmv mahout-distribution-0.5 mahout修改.bash_profile / .bashrcexport HADOOP_HOME=$HOME/local/hadoopexport HADOOP_CONF_DIR=$HADOOP_HOME/conf为方便使用程序命令,可把程序bin目录添加到$PA TH下,或者直接alias 。

hadoop是什么

初识大数据(二. Hadoop是什么?)hadoop是一个由Apache基金会所发布的用于大规模集群上的分布式系统并行编程基础框架。

目前已经是大数据领域最流行的开发架构。

并且已经从HDFS、MapReduce、Hbase三大核心组件成长为一个具有60多个组件构成的庞大生态,可以满足大数据采集、存储、开发、分析、算法、建模等方方面面。

在hadoop的使用版本中,目前除Apache的版本,hadoop还有Cloudera与Hortonworks公司的两大发行版,并且两家公司还有各自的开分的相关生态组件、管理工具。

便于Hadoop集群的供应、管理和监控。

一.两开发行版1.Cloudera1)Cloudera Manager管理工具:收费,稳定性高、集成性差、hadoop 版本更新慢、不支持二次开发、安装复杂。

,2) CDH发行版:部分开源,基本上支持所有组件,只依赖cdh自已的版本2.Hortonworks1)Ambari管理工具:免费,稳定性相对不高,集成性好,hadoop版本更新快,支持二次开发、安装简便。

2)HDP发行版:完全开源,基本上支持所有组件,直接依赖apache hadoop版两个发行版,在个别组件是不兼容的,比如安全组件等。

另外,现在这两个公司已经合并了,意味着将来在组件等方面会有所融合。

二.Hadoop常用组件简介1.核心组件1)HDFS:分布式文件系统(Hadoop Distributed File System),是一个高度容错性的系统,适合部署在廉价的机器上。

能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

HDFS 允许您连接多个集群中包含的节点,那些集群上分布着一些数据文件。

然后可以将那些数据文件作为一个无缝文件系统来进行访问和存储。

2)Yarn:(Yet Another Resource Negotiator)也被称为MapReduce2.0是一种新的Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,为集群在利用率、资源统一管理和数据共享等方面提供支持。

Java推荐系统使用协同过滤和推荐算法进行个性化推荐

Java推荐系统使用协同过滤和推荐算法进行个性化推荐随着互联网的快速发展,推荐系统在我们的日常生活中扮演了越来越重要的角色。

推荐系统能够根据用户的兴趣和行为,为用户提供个性化的推荐信息,提高用户的满意度和使用体验。

而在Java编程领域,我们可以利用协同过滤和推荐算法来构建一个强大的个性化推荐系统。

一、协同过滤算法协同过滤算法是推荐系统中的一种常用算法。

它通过发现用户的兴趣相似度或者物品的相似度,给用户推荐与其兴趣相似的物品。

协同过滤算法有两种主要类型:基于用户的协同过滤和基于物品的协同过滤。

1. 基于用户的协同过滤基于用户的协同过滤算法主要通过对用户之间的兴趣相似度进行计算,来实现推荐。

算法的具体过程如下:- 首先,计算用户之间的兴趣相似度。

可以使用余弦相似度等算法来计算用户之间的相似度。

- 然后,根据用户之间的相似度,找到与目标用户兴趣相似度最高的用户集合。

- 最后,根据与目标用户兴趣相似度最高的用户集合的兴趣,给目标用户推荐未曾浏览过的物品。

2. 基于物品的协同过滤基于物品的协同过滤算法则是通过计算物品之间的相似度,从而进行推荐。

算法的具体过程如下:- 首先,计算物品之间的相似度。

可以使用欧氏距离、皮尔逊相关系数等算法来计算物品之间的相似度。

- 然后,对于目标用户,找到他已经浏览的物品。

- 最后,根据浏览的物品的相似度,给用户推荐相似度高的其他物品。

二、推荐算法除了协同过滤算法,推荐系统还可以使用其他的推荐算法。

常见的推荐算法包括内容过滤、矩阵分解、深度学习等。

1. 内容过滤内容过滤算法主要通过分析用户的历史行为和物品的特征,来实现推荐。

它可以根据用户的兴趣爱好,给用户推荐相似的物品。

内容过滤算法的优点是不需要考虑用户之间的相似度,因此计算速度较快。

2. 矩阵分解矩阵分解算法是一种基于数学模型的推荐算法。

它通过分解用户-物品评分矩阵,得到用户和物品的低维度表示,从而进行推荐。

矩阵分解算法的优点是能够处理数据稀疏的情况,并且可以得到潜在的用户兴趣和物品特征。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Apache Mahout 简介Grant Ingersoll, 技术人员, Lucid Imagination简介:当研究院和企业能获取足够的专项研究预算之后,能从数据和用户输入中学习的智能应用程序将变得更加常见。

人们对机器学习技巧(比如说集群、协作筛选和分类)的需求前所未有地增长,无论是查找一大群人的共性还是自动标记海量Web 内容。

Apache Mahout 项目旨在帮助开发人员更加方便快捷地创建智能应用程序。

Mahout 的创始者Grant Ingersoll 介绍了机器学习的基本概念,并演示了如何使用Mahout 来实现文档集群、提出建议和组织内容。

在信息时代,公司和个人的成功越来越依赖于迅速有效地将大量数据转化为可操作的信息。

无论是每天处理数以千计的个人电子邮件消息,还是从海量博客文章中推测用户的意图,都需要使用一些工具来组织和增强数据。

这其中就蕴含着机器学习领域以及本文章所介绍项目的前景:Apache Mahout(见参考资料)。

机器学习是人工智能的一个分支,它涉及通过一些技术来允许计算机根据之前的经验改善其输出。

此领域与数据挖掘密切相关,并且经常需要使用各种技巧,包括统计学、概率论和模式识别等。

虽然机器学习并不是一个新兴领域,但它的发展速度是毋庸置疑的。

许多大型公司,包括IBM®、Google、Amazon、Yahoo! 和Facebook,都在自己的应用程序中实现了机器学习算法。

此外,还有许多公司在自己的应用程序中应用了机器学习,以便学习用户以及过去的经验,从而获得收益。

在简要概述机器学习的概念之后,我将介绍Apache Mahout 项目的特性、历史和目标。

然后,我将演示如何使用Mahout 完成一些有趣的机器学习任务,这需要使用免费的Wikipedia 数据集。

机器学习101机器学习可以应用于各种目的,从游戏、欺诈检测到股票市场分析。

它用于构建类似于Netflix 和Amazon 所提供的系统,可根据用户的购买历史向他们推荐产品,或者用于构建可查找特定时间内的所有相似文章的系统。

它还可以用于根据类别(体育、经济和战争等)对网页自动进行分类,或者用于标记垃圾电子邮件。

本文无法完全列出机器学习的所有应用。

如果您希望更加深入地探究该领域,我建议您参阅参考资料。

可以采用一些机器学习方法来解决问题。

我将重点讨论其中最常用的两个—监管和无监管学习—因为它们是Mahout 支持的主要功能。

监管学习的任务是学习带标签的训练数据的功能,以便预测任何有效输入的值。

监管学习的常见例子包括将电子邮件消息分类为垃圾邮件,根据类别标记网页,以及识别手写输入。

创建监管学习程序需要使用许多算法,最常见的包括神经网络、Support Vector Machines (SVMs) 和Naive Bayes 分类程序。

无监管学习的任务是发挥数据的意义,而不管数据的正确与否。

它最常应用于将类似的输入集成到逻辑分组中。

它还可以用于减少数据集中的维度数据,以便只专注于最有用的属性,或者用于探明趋势。

无监管学习的常见方法包括k-Means、分层集群和自组织地图。

在本文中,我将重点讨论Mahout 当前已实现的三个具体的机器学习任务。

它们正好也是实际应用程序中相当常见的三个领域:∙协作筛选∙集群∙分类在研究它们在Mahout 中的实现之前,我将从概念的层面上更加深入地讨论这些任务。

协作筛选协作筛选 (CF) 是Amazon 等公司极为推崇的一项技巧,它使用评分、单击和购买等用户信息为其他站点用户提供推荐产品。

CF 通常用于推荐各种消费品,比如说书籍、音乐和电影。

但是,它还在其他应用程序中得到了应用,主要用于帮助多个操作人员通过协作来缩小数据范围。

您可能已经在Amazon 体验了CF 的应用,如图1所示:图1. Amazon 上的协作筛选示例CF 应用程序根据用户和项目历史向系统的当前用户提供推荐。

生成推荐的4 种典型方法如下:∙基于用户:通过查找相似的用户来推荐项目。

由于用户的动态特性,这通常难以定量。

∙基于项目:计算项目之间的相似度并做出推荐。

项目通常不会过多更改,因此这通常可以离线完成。

∙Slope-One:非常快速简单的基于项目的推荐方法,需要使用用户的评分信息(而不仅仅是布尔型的首选项)。

∙基于模型:通过开发一个用户及评分模型来提供推荐。

所有CF 方法最终都需要计算用户及其评分项目之间的相似度。

可以通过许多方法来计算相似度,并且大多数CF 系统都允许您插入不同的指标,以便确定最佳结果。

集群对于大型数据集来说,无论它们是文本还是数值,一般都可以将类似的项目自动组织,或集群,到一起。

举例来说,对于全美国某天内的所有的报纸新闻,您可能希望将所有主题相同的文章自动归类到一起;然后,可以选择专注于特定的集群和主题,而不需要阅读大量无关内容。

另一个例子是:某台机器上的传感器会持续输出内容,您可能希望对输出进行分类,以便于分辨正常和有问题的操作,因为普通操作和异常操作会归类到不同的集群中。

与CF 类似,集群计算集合中各项目之间的相似度,但它的任务只是对相似的项目进行分组。

在许多集群实现中,集合中的项目都是作为矢量表示在n维度空间中的。

通过矢量,开发人员可以使用各种指标(比如说曼哈顿距离、欧氏距离或余弦相似性)来计算两个项目之间的距离。

然后,通过将距离相近的项目归类到一起,可以计算出实际集群。

可以通过许多方法来计算集群,每种方法都有自己的利弊。

一些方法从较小的集群逐渐构建成较大的集群,还有一些方法将单个大集群分解为越来越小的集群。

在发展成平凡集群表示之前(所有项目都在一个集群中,或者所有项目都在各自的集群中),这两种方法都会通过特定的标准退出处理。

流行的方法包括k-Means 和分层集群。

如下所示,Mahout 也随带了一些不同的集群方法。

分类∙Matrix 和矢量库。

∙上述算法的示例。

Mahout 入门Mahout 的入门相对比较简单。

首先,您需要安装以下软件:∙JDK 1.6 或更高版本∙Ant 1.7 或更高版本∙如果要编译Mahout 源代码,还需要安装Maven 2.0.9 或2.0.10您还需要本文的示例代码(见下载部分),其中包括一个Mahout 副本及其依赖关系。

依照以下步骤安装示例代码:1. 解压缩 sample.zip2. cd apache-mahout-examples3. ant install步骤 3 将下载必要的Wikipedia 文件将编译代码。

所使用的Wikipedia 文件大约为2.5 GB,因此下载时间将由您的宽带决定。

回页首建立一个推荐引擎Mahout 目前提供了一些工具,可用于通过Taste 库建立一个推荐引擎—针对CF 的快速且灵活的引擎。

Taste 支持基于用户和基于项目的推荐,并且提供了许多推荐选项,以及用于自定义的界面。

Taste 包含 5 个主要组件,用于操作用户、项目和首选项:∙DataModel:用于存储用户、项目和首选项∙UserSimilarity:用于定义两个用户之间的相似度的界面∙ItemSimilarity:用于定义两个项目之间的相似度的界面∙Recommender:用于提供推荐的界面∙UserNeighborhood:用于计算相似用户邻近度的界面,其结果随时可由Recommender使用借助这些组件以及它们的实现,开发人员可以构建复杂的推荐系统,提供基于实时或者离线的推荐。

基于实时的推荐经常只能处理数千用户,而离线推荐具有更好的适用性。

Taste 甚至提供了一些可利用Hadoop 离线计算推荐的工具。

在许多情况中,这种合适的方法可以帮助您满足包含大量用户、项目和首选项的大型系统的需求。

为了演示如何构建一个简单的推荐系统,我需要一些用户、项目和评分。

为此,我们会使用cf.wikipedia.GenerateRatings中的代码(包含在示例代码的源代码中)为Wikipedia 文档(Taste 称之为项目)随机生成大量用户和首选项,然后再手动补充一些关于特定话题(Abraham Lincoln)的评分,从而创建示例中的最终recommendations.txt 文件。

此方法的内涵是展示CF 如何将对某特定话题感兴趣的人导向相关话题的其他文档。

此示例的数据来源于990(标记为从0 到989)个随机用户,他们随机为集合中的所有文章随机分配了一些评分,以及10 个用户(标记为从990 到999),他们对集合中包含Abraham Lincoln关键字的17 篇文章中的部分文章进行了评分。

注意虚构数据!本文中的示例完全使用的是虚构数据。

我自己完成了所有评分,模拟了10 个对Abraham Lincoln 感兴趣的实际用户。

虽然我相信数据内部的概念很有趣,但数据本身以及所使用的值并非如此。

如果您希望获得实际数据,我建议您参阅University of Minnesota 的GroupLens项目,以及Taste 文档(见参考资料)。

我选择虚构数据的原因是希望在所有示例中都使用单一数据集。

首先,我将演示如何为在recommendations.txt 文件中指定了分数的用户创建推荐。

这是Taste 最为常见的应用,因此首先需要载入包含推荐的数据,并将它存储在一个DataModel中。

Taste 提供了一些不同的DataModel实现,用于操作文件和数据库。

在本例中,为简便起见,我选择使用FileDataModel类,它对各行的格式要求为:用户ID、项目ID、首选项—其中,用户ID 和项目ID 都是字符串,而首选项可以是双精度型。

建立了模型之后,我需要通知Taste 应该如何通过声明一个UserSimilarity实现来比较用户。

根据所使用的UserSimilarity实现,您可能还需要通知Taste 如何在未指定明确用户设置的情况下推断首选项。

清单 1 实现了以上代码。

(示例代码中的cf.wikipedia.WikipediaTasteUserDemo包含了完整的代码清单)。

在清单1中,我使用了PearsonCorrelationSimilarity,它用于度量两个变量之间的关系,但是也可以使用其他UserSimilarity度量。

应该根据数据和测试类型来选择相似度度量。

对于此数据,我发现这种组合最为合适,但仍然存在一些问题。

有关如何选择相似度度量的更多信息,请访问Mahout 网站(见参考资料)。

为了完成此示例,我需要构建一个UserNeighborhood和一个Recommender。

UserNeighborhood可以识别与相关用户类似的用户,并传递给Recommender,后者将负责创建推荐项目排名表。

相关文档
最新文档