分享

Apache Mahout

 恶魔传说 2015-11-26

     机器学习最常用的两个:监督学习和无监督学习,它们是Mahout支持的主要功能。

      监督学习的任务是学习带标签的训练数据的功能,以便预测任何有效输入的值。常见例子包括将电子邮件消息分类为垃圾邮件,根据类别标记网页,以及识别手写输入。创建监督学习程序需要使用许多算法,最常见的包括神经网络、Support Vector Machines(SVMs)和Naive Bayes分类程序。

      无监督学习的任务是发挥数据的意义,而不管数据的正确与否。它最常用于将类似的输入集成到逻辑分组中。它还可以用于减少数据集中的维度数据,以便只专注于最有用的属性,或者用于探明趋势。常见方法包括K-means、分层集群和自组织地图。

       Mahout当前已实现三个具体的机器学习任务:协作筛选、集群和分类。

       协作筛选(CF)是Amazon等公司极为推崇的一项技巧,它使用评分、单击和购买等用户信息为其他站点用户提供推荐产品。CF通常用于推荐各种消费品。CF应用程序根据用户和项目历史向系统的当前用户提供推荐。生成推荐的4种典型方法如下:

      基于用户:通过查找相似的用户来推荐项目。由于用户的动态特性,这通常难以定量。

      基于项目:计算项目之间的相似度并作出推荐。项目通常不会过多更改,因此这通常可以离线完成。

      Slope-One:非常快速简单的基于项目的推荐方法,需要使用用户的评分信息。

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

      所有CF方法最终都需要计算用户及其评分项目之间的相似度。可以通过许多方法来计算相似度,并且大多数CF系统都允许您插入不同的指标,以便确定最佳结果。

      集群:

      对于大型数据集来说,无论它们是文本还是数值,一般都可以将类似的项目自动组织,或 集群,到一起。举例来说,对于全美国某天内的所有的报纸新闻,您可能希望将所有主题相同的文章自动归类到一起;然后,可以选择专注于特定的集群和主题,而不需要阅读大量无关内容。另一个例子是:某台机器上的传感器会持续输出内容,您可能希望对输出进行分类,以便于分辨正常和有问题的操作,因为普通操作和异常操作会归类到不同的集群中。

      与 CF 类似,集群计算集合中各项目之间的相似度,但它的任务只是对相似的项目进行分组。在许多集群实现中,集合中的项目都是作为矢量表示在 n维度空间中的。通过矢量,开发人员可以使用各种指标(比如说曼哈顿距离、欧氏距离或余弦相似性)来计算两个项目之间的距离。然后,通过将距离相近的项目归类到一起,可以计算出实际集群。

       可以通过许多方法来计算集群,每种方法都有自己的利弊。一些方法从较小的集群逐渐构建成较大的集群,还有一些方法将单个大集群分解为越来越小的集群。在发展成平凡集群表示之前(所有项目都在一个集群中,或者所有项目都在各自的集群中),这两种方法都会通过特定的标准退出处理。流行的方法包括 k-Means 和分层集群。

      分类:

      分类(通常也称为 归类)的目标是标记不可见的文档,从而将它们归类不同的分组中。机器学习中的许多分类方法都需要计算各种统计数据(通过指定标签与文档的特性相关),从而创建一个模型以便以后用于分类不可见的文档。举例来说,一种简单的分类方法可以跟踪与标签相关的词,以及这些词在某个标签中的出现次数。然后,在对新文档进行分类时,系统将在模型中查找文档中的词并计算概率,然后输出最佳结果并通过一个分类来证明结果的正确性。

       分类功能的特性可以包括词汇、词汇权重(比如说根据频率)和语音部件等。当然,这些特性确实有助于将文档关联到某个标签并将它整合到算法中。

       Apache Mahout是Apache Software Foundation(ASF)开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在Apache在许可下免费使用。Mahout包含许多实现,包括集群、分类、CP和进化程序。此外,通过使用Apache Hadoop库,Mahout可以有效地扩展到云中。

       Taste是Apache Mahout提供的一个协同过滤算法的高效实现,它是一个基于Java实现的可扩展的、高效的推荐引擎。Taste既实现了最基本的基于用户的和基于内容的推荐算法,同时也提供了扩展接口,使用户可以方便的定义和实现自己的推荐算法。同时,Taste不仅仅只适用于Java应用程序,它可以作为内部服务器的一个组件以HTTP和Web Service的形式向外界提供推荐的逻辑。

    

Taste 由以下五个主要的组件组成:

  • DataModel:DataModel 是用户喜好信息的抽象接口,它的具体实现支持从任意类型的数据源抽取用户喜好信息。Taste 默认提供 JDBCDataModel 和 FileDataModel,分别支持从数据库和文件中读取用户的喜好信息。
  • UserSimilarity 和 ItemSimilarity:UserSimilarity 用于定义两个用户间的相似度,它是基于协同过滤的推荐引擎的核心部分,可以用来计算用户的“邻居”,这里我们将与当前用户口味相似的用户称为他的邻居。ItemSimilarity 类似的,计算内容之间的相似度。
  • UserNeighborhood:用于基于用户相似度的推荐方法中,推荐的内容是基于找到与当前用户喜好相似的“邻居用户”的方式产生的。UserNeighborhood 定义了确定邻居用户的方法,具体实现一般是基于 UserSimilarity 计算得到的。
  • Recommender:Recommender 是推荐引擎的抽象接口,Taste 中的核心组件。程序中,为它提供一个 DataModel,它可以计算出对不同用户的推荐内容。实际应用中,主要使用它的实现类 GenericUserBasedRecommender 或者 GenericItemBasedRecommender,分别实现基于用户相似度的推荐引擎或者基于内容的推荐引擎。

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多