您好,欢迎访问三七文档
ApacheMahout简介:通过可伸缩、商业友好的机器学习来构建智能应用当研究院和企业能获取足够的专项研究预算之后,能从数据和用户输入中学习的智能应用程序将变得更加常见。人们对机器学习技巧(比如说集群、协作筛选和分类)的需求前所未有地增长,无论是查找一大群人的共性还是自动标记海量Web内容。ApacheMahout项目旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout的创始者GrantIngersoll介绍了机器学习的基本概念,并演示了如何使用Mahout来实现文档集群、提出建议和组织内容。在信息时代,公司和个人的成功越来越依赖于迅速有效地将大量数据转化为可操作的信息。无论是每天处理数以千计的个人电子邮件消息,还是从海量博客文章中推测用户的意图,都需要使用一些工具来组织和增强数据。机器学习是人工智能的一个分支,它涉及通过一些技术来允许计算机根据之前的经验改善其输出。此领域与数据挖掘密切相关,并且经常需要使用各种技巧,包括统计学、概率论和模式识别等。虽然机器学习并不是一个新兴领域,但它的发展速度是毋庸置疑的。许多大型公司,包括IBM®、Google、Amazon、Yahoo!和Facebook,都在自己的应用程序中实现了机器学习算法。此外,还有许多公司在自己的应用程序中应用了机器学习,以便学习用户以及过去的经验,从而获得收益。在简要概述机器学习的概念之后,我将介绍ApacheMahout项目的特性、历史和目标。然后,我将演示如何使用Mahout完成一些有趣的机器学习任务,这需要使用免费的Wikipedia数据集。机器学习101机器学习可以应用于各种目的,从游戏、欺诈检测到股票市场分析。它用于构建类似于Netflix和Amazon所提供的系统,可根据用户的购买历史向他们推荐产品,或者用于构建可查找特定时间内的所有相似文章的系统。它还可以用于根据类别(体育、经济和战争等)对网页自动进行分类,或者用于标记垃圾电子邮件。本文无法完全列出机器学习的所有应用。可以采用一些机器学习方法来解决问题。我将重点讨论其中最常用的两个—监管和无监管学习—因为它们是Mahout支持的主要功能。监管学习的任务是学习带标签的训练数据的功能,以便预测任何有效输入的值。监管学习的常见例子包括将电子邮件消息分类为垃圾邮件,根据类别标记网页,以及识别手写输入。创建监管学习程序需要使用许多算法,最常见的包括神经网络、SupportVectorMachines(SVMs)和NaiveBayes分类程序。无监管学习的任务是发挥数据的意义,而不管数据的正确与否。它最常应用于将类似的输入集成到逻辑分组中。它还可以用于减少数据集中的维度数据,以便只专注于最有用的属性,或者用于探明趋势。无监管学习的常见方法包括k-Means、分层集群和自组织地图。在本文中,我将重点讨论Mahout当前已实现的三个具体的机器学习任务。它们正好也是实际应用程序中相当常见的三个领域:协作筛选集群分类在研究它们在Mahout中的实现之前,我将从概念的层面上更加深入地讨论这些任务。协作筛选协作筛选(CF)是Amazon等公司极为推崇的一项技巧,它使用评分、单击和购买等用户信息为其他站点用户提供推荐产品。CF通常用于推荐各种消费品,比如说书籍、音乐和电影。但是,它还在其他应用程序中得到了应用,主要用于帮助多个操作人员通过协作来缩小数据范围。您可能已经在Amazon体验了CF的应用,如图1所示:图1.Amazon上的协作筛选示例CF应用程序根据用户和项目历史向系统的当前用户提供推荐。生成推荐的4种典型方法如下:基于用户:通过查找相似的用户来推荐项目。由于用户的动态特性,这通常难以定量。基于项目:计算项目之间的相似度并做出推荐。项目通常不会过多更改,因此这通常可以离线完成。Slope-One:非常快速简单的基于项目的推荐方法,需要使用用户的评分信息(而不仅仅是布尔型的首选项)。基于模型:通过开发一个用户及评分模型来提供推荐。所有CF方法最终都需要计算用户及其评分项目之间的相似度。可以通过许多方法来计算相似度,并且大多数CF系统都允许您插入不同的指标,以便确定最佳结果。集群对于大型数据集来说,无论它们是文本还是数值,一般都可以将类似的项目自动组织,或集群,到一起。举例来说,对于全美国某天内的所有的报纸新闻,您可能希望将所有主题相同的文章自动归类到一起;然后,可以选择专注于特定的集群和主题,而不需要阅读大量无关内容。另一个例子是:某台机器上的传感器会持续输出内容,您可能希望对输出进行分类,以便于分辨正常和有问题的操作,因为普通操作和异常操作会归类到不同的集群中。与CF类似,集群计算集合中各项目之间的相似度,但它的任务只是对相似的项目进行分组。在许多集群实现中,集合中的项目都是作为矢量表示在n维度空间中的。通过矢量,开发人员可以使用各种指标(比如说曼哈顿距离、欧氏距离或余弦相似性)来计算两个项目之间的距离。然后,通过将距离相近的项目归类到一起,可以计算出实际集群。可以通过许多方法来计算集群,每种方法都有自己的利弊。一些方法从较小的集群逐渐构建成较大的集群,还有一些方法将单个大集群分解为越来越小的集群。在发展成平凡集群表示之前(所有项目都在一个集群中,或者所有项目都在各自的集群中),这两种方法都会通过特定的标准退出处理。流行的方法包括k-Means和分层集群。如下所示,Mahout也随带了一些不同的集群方法.分类分类(通常也称为归类)的目标是标记不可见的文档,从而将它们归类不同的分组中。机器学习中的许多分类方法都需要计算各种统计数据(通过指定标签与文档的特性相关),从而创建一个模型以便以后用于分类不可见的文档。举例来说,一种简单的分类方法可以跟踪与标签相关的词,以及这些词在某个标签中的出现次数。然后,在对新文档进行分类时,系统将在模型中查找文档中的词并计算概率,然后输出最佳结果并通过一个分类来证明结果的正确性。分类功能的特性可以包括词汇、词汇权重(比如说根据频率)和语音部件等。当然,这些特性确实有助于将文档关联到某个标签并将它整合到算法中。机器学习这个领域相当广泛和活跃。理论再多终究需要实践。接下来,我将继续讨论Mahout及其用法。Mahout简介ApacheMahout是ApacheSoftwareFoundation(ASF)开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在Apache在许可下免费使用。该项目已经发展到了它的最二个年头,目前只有一个公共发行版。Mahout包含许多实现,包括集群、分类、CP和进化程序。Mahout的历史背景知识mahout的意思是大象的饲养者及驱赶者。Mahout这个名称来源于该项目(有时)使用ApacheHadoop—其徽标上有一头黄色的大象—来实现可伸缩性和容错性。Mahout项目是由ApacheLucene(开源搜索)社区中对机器学习感兴趣的一些成员发起的,他们希望建立一个可靠、文档翔实、可伸缩的项目,在其中实现一些常见的用于集群和分类的机器学习算法。Mahout的目标还包括:建立一个用户和贡献者社区,使代码不必依赖于特定贡献者的参与或任何特定公司和大学的资金。专注于实际用例,这与高新技术研究及未经验证的技巧相反。提供高质量文章和示例。特性虽然在开源领域中相对较为年轻,但Mahout已经提供了大量功能,特别是在集群和CF方面。Mahout的主要特性包括:Map-Reduce简介Map-Reduce是Google开发的一种分布式编程API,并在ApacheHadoop项目中得到了实现。与分布式文件系统相结合,它可以为程序员提供一个定义良好的用于描述计算任务的API,从而帮助他们简化并行化问题的任务。TasteCF。Taste是SeanOwen在SourceForge上发起的一个针对CF的开源项目,并在2008年被赠予Mahout。一些支持Map-Reduce的集群实现包括k-Means、模糊k-Means、Canopy、Dirichlet和Mean-Shift。DistributedNaiveBayes和ComplementaryNaiveBayes分类实现。针对进化编程的分布式适用性功能。Matrix和矢量库。上述算法的示例。Mahout入门Mahout的入门相对比较简单。首先,您需要安装以下软件:JDK1.6或更高版本Ant1.7或更高版本如果要编译Mahout源代码,还需要安装Maven2.0.9或2.0.10您还需要本文的示例代码(见下载部分),其中包括一个Mahout副本及其依赖关系。依照以下步骤安装示例代码:解压缩sample.zipcdapache-mahout-examplesantinstall步骤3将下载必要的Wikipedia文件将编译代码。所使用的Wikipedia文件大约为2.5GB,因此下载时间将由您的宽带决定。建立一个推荐引擎Mahout目前提供了一些工具,可用于通过Taste库建立一个推荐引擎—针对CF的快速且灵活的引擎。Taste支持基于用户和基于项目的推荐,并且提供了许多推荐选项,以及用于自定义的界面。Taste包含5个主要组件,用于操作用户、项目和首选项:DataModel:用于存储用户、项目和首选项UserSimilarity:用于定义两个用户之间的相似度的界面ItemSimilarity:用于定义两个项目之间的相似度的界面Recommender:用于提供推荐的界面UserNeighborhood:用于计算相似用户邻近度的界面,其结果随时可由Recommender使用借助这些组件以及它们的实现,开发人员可以构建复杂的推荐系统,提供基于实时或者离线的推荐。基于实时的推荐经常只能处理数千用户,而离线推荐具有更好的适用性。Taste甚至提供了一些可利用Hadoop离线计算推荐的工具。在许多情况中,这种合适的方法可以帮助您满足包含大量用户、项目和首选项的大型系统的需求。为了演示如何构建一个简单的推荐系统,我需要一些用户、项目和评分。为此,我们会使用cf.wikipedia.GenerateRatings中的代码(包含在示例代码的源代码中)为Wikipedia文档(Taste称之为项目)随机生成大量用户和首选项,然后再手动补充一些关于特定话题(AbrahamLincoln)的评分,从而创建示例中的最终recommendations.txt文件。此方法的内涵是展示CF如何将对某特定话题感兴趣的人导向相关话题的其他文档。此示例的数据来源于990(标记为从0到989)个随机用户,他们随机为集合中的所有文章随机分配了一些评分,以及10个用户(标记为从990到999),他们对集合中包含AbrahamLincoln关键字的17篇文章中的部分文章进行了评分.注意虚构数据!本文中的示例完全使用的是虚构数据。我自己完成了所有评分,模拟了10个对AbrahamLincoln感兴趣的实际用户。虽然我相信数据内部的概念很有趣,但数据本身以及所使用的值并非如此。我选择虚构数据的原因是希望在所有示例中都使用单一数据集。首先,我将演示如何为在recommendations.txt文件中指定了分数的用户创建推荐。这是Taste最为常见的应用,因此首先需要载入包含推荐的数据,并将它存储在一个DataModel中。Taste提供了一些不同的DataModel实现,用于操作文件和数据库。在本例中,为简便起见,我选择使用FileDataModel类,它对各行的格式要求为:用户ID、项目ID、首选项—其中,用户ID和项目ID都是字符串,而首选项可以是双精度型。建立了模型之后,我需要通知Taste应该如何通过声明一个UserSimilarity实现来比较用户。根据所使用的UserSimilarity实现,您可能还需要通知Taste如何在未指定明确用户设置的情况下推断首选项。清单1实现了以上代码。(示例代码中的cf.wikipedia.WikipediaTasteUserDemo包含了完整的代码清单)。清单1.创建模型和定义用户相似
本文标题:mahout简介
链接地址:https://www.777doc.com/doc-4281106 .html