天天看点

机器学习开源项目

转载于:http://www.shamoxia.com/html/y2010/1892.html

Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。经典算法包括聚类、分类、协同过 滤、进化编程等等,并且,在 Mahout 的最近版本中还加入了对 Apache Hadoop 的支持,使这些算法可以更高效的运行在云计算环境中。开源项目Apache Mahout三月份的时候推 出了它的0.3版本,这个新版本在之前的基础上添加了一些新功能,比之前的版本更为稳定,性能也有相应的提升。InfoQ采访了Apache Mahout项目的开发者Grant Ingersoll和Ted Dunning,其中Grant Ingresoll也是该项目的创始人之一。

过去十年里,从大 量原始数据中解析出相关信息的需求急剧增长,以致于聚类(clustering)、协同过滤(collaborative filtering)和分类(categorization)等机器学习技术的需 求也是呈稳定增长势态。

Grant Ingersoll这样介 绍Mahout 项目:

  • 将已知方法语境中的文档聚类 (Clustering)有助于把注意力集中到某些特定的聚类和内容上,从而避免在无关的内容上浪费精力。
  • 推荐算法(协同过滤推荐算法 -Collaborative Filtering)常常用来向用户推荐书籍、音乐、电影等内容,也可以用于多用户协作的应用中精简所需关注的数 据。
  • 模式匹配(朴素贝叶斯分类器 -Naïve Bayes Classifier等分类算法)可用于归类之前没有见过的文档。归类新文档时,算法在模式中查找文档中涉及的词汇, 计算该文档属于各个模式的概率,最后文档将归于概率最大的模式,输入的结果往往都以数值来表示算法本身对这个结果的正确与否有多大的把握。
  • Mahout 项目通过Apache Hadoop的支持来获 得伸缩性。

Mahout另一个重点是,它提供一系列工 具把文本数据表示成矩阵形式。这也是采用Mahout机器学习算法来处理数据的首要任务。

Mahout项目是由Apache Lucene(开 源搜索项目)社区几 个热衷于聚类、分类等机器学习算法的技术人员所发起。社区最初的开发“追随”于Ng et al.发表的论文“支 持多核之 上的机器学习的Map- Reduce框架(Map-Reduce for Machine Learning on Multicore)”,自项目启动以来,社区也致力于各 种机器学习算法、模式的开发。

最新Apache Mahout版本的亮点有:

  • 新添功能:基于高性能的Colt library的 math、collections模块
  • 采用FP-bonsai pruning而实现更快的频 繁模式增长(Frequent Pattern Growtt)算法
  • 并行计算Dirichlet 聚 类算法(基于模型的聚类算法)
  • 并行计算基于共现算法的推荐引擎
  • 结合基于LLR的ngram生成算法并行处理文本文档 到向量的转换
  • 并行Lanczos SVD(奇异 值分解)计算
  • 提供运行算法、工具以及范例的脚本程序

在问到这个版本中最激动人心的特性 时,Ingersoll这样回答:

新添加的分布式奇异值分解(Singular Value Decomposition)计算非常令人期待,此外,还有那些方便用户把内容导入到Mahout的诸多工具。其中,最激动人心的其实并不是有形的,而是 Mahout社区的成长。社区目前已吸引到数量客观的贡献者和用户。任何开源项目的发展过程当中,最初阶段往往都很惨淡,工作常常只有一两个人去做,一旦 当中有人离开甚至只是减缓开发速度,整个项目都有可能中途夭折。但我相信Mahout已经通过了这样的考验,现在已经有非常多非常活跃的社区成员正努力把 它变成一个真正令人激动的项目。

Mahout项目的未来计划包括:

  • 今年发布1.0版本
  • 从 1.0版本开始发布稳定的API
  • 实现诸如随机梯度下降 (Stochastic Gradient Descent - SGD)算法的在线学习功能
  • 提供支持向量机 (Support Vector Machine - SVM)算法实现

SGD 和SVM的实现将适宜于文档挖掘以及其它一些与文本或重复归类数据相关的应用。尤其令人期待的是SGD系统将引入在线创建互动变量的 能力。

开放源代码项目mahout,实现了很多机器学习的算法和一些实用的系统,对于从事机器学习和web挖掘的人员来说是个很值得学习的资源。mahout是 基于hadoop的,可以分布式运行,至此Lucence、Nutch、Mahout为构建开源的分布式的搜索引擎和Web挖掘提供了完整的支持,三剑合 璧,威力无穷。Mahout的代码风格延续了Nutch的优良风格,代码可读性很强,包含了推荐系统、聚类中的kmeans,fuzzykmeans,canopy, dirichlet,分类中的bayes、cbayes等算法的实现,以及交叉验证,计算正确率,各种距离,模型的构建等。还缺少像神经网络这个强大工具 的实现,但未来很可能会加上。

mahout的详细简介及建立一个推荐系统在这里。

基于 Apache Mahout 构建社会化推荐引擎

Web 2.0 的一个核心思想就是“群体智慧”,即基于大众行为,为每个用户提供个性化的推荐。这使得如何让用户能更快速更准确的获得所需要的信息,成为了 Web 应用成败的关键。Apache Mahout 是 ASF(Apache Software Foundation)的一个较新的开源项目,提供机器学习领域的一些经典算法的高效实现。本文主要讲述如何基于 Apache Mahout 来构建社会化推荐引擎,帮助 Web 应用开发者更高效的实现个性化推荐功能,从而提高最终用户满意度。

推荐引擎利用特殊的信息过滤(IF,Information Filtering)技术,将不同的内容(例如电影、音乐、书籍、新闻、图片、网页等)推荐给可能感兴趣的用户。通常情况下,推荐引擎的实现是通过将用户 的个人喜好与特定的参考特征进行比较,并试图预测用户对一些未评分项目的喜好程度。参考特征的选取可能是从项目本身的信息中提取的,或是基于用户所在的社 会或社团环境。

另附:几个开发学习资源:

  1. 几个推荐的网站

    http://mloss.org/

    mloss是machine learning open source software的缩写,上面有大量的开源软件,而且不断更新。

    http://jmlr.csail.mit.edu/

    Journal of Machine Learning Research (JMLR)应该说是机器学习领域最权威的期刊了,而且可以免费下载各年的论文,这实在太好了!

    http://www.kernel-machines.org/

    专注于kernel methods的机器学习,上面同样有很多开源的软件包。

  2. 机器学习领域的几个知名软件

    R

    http://cran.r-project.org/web/views/MachineLearning.html

    R是一个很有名的开源项目,主要用于科学计算,http://mloss.org/上面很大一部分都R-project的子项目。

    Shogun

    http://www.shogun-toolbox.org/

    Shogun是用C++写的机器学习软件包,支持向量机方面的算法很多。它同时为C/C++、matlab、Octave、R和python提供接口,扩展性也非常好。

    Weka

    http://www.cs.waikato.ac.nz/ml/weka/

    Weka是用Java写的开源软件,数据挖掘领域使用很广泛。

    KNIME

    http://www.knime.org/

    同样是Java写的开源软件,提供一个良好的数据分析平台和开发平台。