常用机器学习算法库的对比和分析

    R是一种数学语言,里面封装了大量的机器学习算法,但是它是单机的,不能够很好的处理海量的数据。Weka和R语言类似,里面包含大量经过良好优化的机器学习和数据分析算法,可以处理与格式化、数据转换相关的各种任务,唯一的不足就是它对高内存要求的大数据处理遇到瓶颈。

    Mahout是hadoop的一个机器学习库,有海量数据的并发处理能力,主要的编程模型是MapReduce。而基于MapReduce的机器学习在反复迭代的过程中会产生大量的磁盘IO,即本次计算的结果要作为下一次迭代的输入,这个过程中只能把中间结果存储磁盘,然后在下一次计算的时候从新读取,这对于迭代频发的算法显然是致命的性能瓶颈。所以计算效率很低。现在Mahout已经停止更新MapReduce算法,向Spark迁移。另外,Mahout和Spark ML并不是竞争关系,Mahout是MLlib的补充。

    MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。Spark的设计就是为了支持一些迭代的Job, 这正好符合很多机器学习算法的特点。在逻辑回归的运算场景下,Spark比Hadoop快了100倍以上。Spark MLlib立足于内存计算,适应于迭代式计算。而且Spark提供了一个基于海量数据的机器学习库,它提供了常用机器学习算法的分布式实现,工程师只需要有 Spark基础并且了解机器学习算法的原理,以及方法相关参数的含义,就可以轻松的通过调用相应的 API 来实现基于海量数据的机器学习过程。

    开源Python工具包有很多,这里先从熟悉的讲起,再补充其他来源的资料,也欢迎大家补充。首先推荐大名鼎鼎的scikit-learn,scikit-learn是一个基于NumPy, SciPy, Matplotlib的开源机器学习工具包,主要涵盖分类,回归和聚类算法,例如SVM, 逻辑回归,朴素贝叶斯,随机森林,k-means等算法,代码和文档都非常不错,在许多Python项目中都有应用。例如在我们熟悉的NLTK中,分类器方面就有专门针对scikit-learn的接口,可以调用scikit-learn的分类算法以及训练数据来训练分类器模型。

    Pandas也是基于NumPy和Matplotlib开发的,主要用于数据分析和数据可视化,它的数据结构DataFrame和R语言里的data.frame很像,特别是对于时间序列数据有自己的一套分析机制,非常不错。这里推荐一本书《Python for Data Analysis》,作者是Pandas的主力开发,依次介绍了iPython, NumPy, Pandas里的相关功能,数据可视化,数据清洗和加工,时间数据处理等,案例包括金融股票数据挖掘等,相当不错。PyBrain正如其名,包括神经网络、强化学习(及二者结合)、无监督学习、进化算法。因为目前的许多问题需要处理连续态和行为空间,必须使用函数逼近(如神经网络)以应对高维数据。PyBrain以神经网络为核心,所有的训练方法都以神经网络为一个实例。”

    “Theano 是一个 Python 库,用来定义、优化和模拟数学表达式计算,用于高效的解决多维数组的计算问题。Theano的特点:紧密集成Numpy;高效的数据密集型GPU计算;高效的符号微分运算;高速和稳定的优化;动态生成c代码;广泛的单元测试和自我验证。自2007年以来,Theano已被广泛应用于科学运算。theano使得构建深度学习模型更加容易,可以快速实现多种模型。PS:Theano,一位希腊美女,Croton最有权势的Milo的女儿,后来成为了毕达哥拉斯的老婆。”

    “Pylearn2建立在theano上,部分依赖scikit-learn上,目前Pylearn2正处于开发中,将可以处理向量、图像、视频等数据,提供MLP、RBM、SDA等深度学习模型。”

你可能感兴趣的:(机器学习实战)