java 机器学习库源码_java机器人源码 - CSDN
  • 经典的机器学习方面源代码

    千次阅读 2016-08-11 13:52:32
    编程语言:搞实验个人认为当然matlab最灵活了(但是正版很贵),但是更为前途的是python(numpy+scipy+matplotlib)和C/C++...经典的机器学习方面源代码 机器学习 TensorFlow:Google 开源到底开的是什么? TensorFlow


    编程语言:搞实验个人认为当然matlab最灵活了(但是正版很贵),但是更为前途的是python(numpy+scipy+matplotlib)和C/C++,这样组合既可搞研究,也可搞商业开发,易用性不比matlab差,功能组合更为强大,个人认为,当然R和java也不错.

    1.机器学习开源软件网(收录了各种机器学习的各种编程语言学术与商业的开源软件)

    http://mloss.org

    2偶尔找到的机器学习资源网:(也非常全,1和2基本收录了所有ML的经典开源软件了)

    http://www.dmoz.org/Computers/Artificial_Intelligence/Machine_Learning/Software/

    3libsvm(支持向量机界最牛的,不用多说了,台湾大学的林教授的杰作)

    http://www.csie.ntu.edu.tw/~cjlin/libsvm/

    4WEKA(基于java的机器学习算法最全面最易用的开源软件)

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

    5scikit(本人最喜欢的一个基于python的机器学习软件,代码写得非常好,而且官方的文档非常全,所有都有例子,算法也齐全,开发也活跃
    ,强烈推荐给大家用)

    http://scikit-learn.org/stable/

    6OpenCv(最牛的开源计算机视觉库了,前途无可限量,做图像处理与模式识别的一定要用,总不能整天抱着matlab做实验和工业界脱节吧,但是有一定难度)

    http://opencv.willowgarage.com/wiki/

    7Orange(基于c++和python接口的机器学习软件,界面漂亮,调用方便,可以同时学习C++和python,还有可视化的功能,)

    http://orange.biolab.si/

    8Mallet(基于JAVA实现的机器学习库,主要用于自然语言处理方面,特色是马尔可夫模型和随机域做得好,可和WEKA互补)

    http://mallet.cs.umass.edu/

    9NLTK(PYTHON的自然处理开源库,非常易用,也强大,还有几本orelly的经典教程)

    http://nltk.org/

    10lucene(基于java的包括nutch,solr,hadoop,mahout等全套,是做信息检索和搜索引擎的同志们必学的开源软件了,学JAVA的必学)

    http://lucene.apache.org/

    1.MG4J-ManagingGigabytesforJava

    818137ee-0209-36a6-9d67-b3302273f56a.jpg
    MG4J可以让你通过内插编码(interpolativecoding)技术,为大量的文档集合构建一个被压缩的全文本索引。与Lucene主要区别是,它提供了cluster功能,具有更OO的设计方式。虽然MG4J不是一个像Lucene、Egothor和Xapian那样的信息检索库,但是相信每一位搜索工程师都应该知道它,因为它对构建Java信息检索库提供了低水平的支持。MG4J是在一本很流行的书问世之后被命名的,这本书是由H.Witten,AlistairMoffat和Timothy所写,名字是《管理十亿字节:压缩并且索引文档和图片》。在使用他们的分布式、可容错的网页爬虫UbiCrawler收集到大量的网页数据后,它的作者需要一个软件来解析那些收集来的数据,由于这个需求,MG4J诞生了。MG4J的库提供了优化的类来处理I/O,转化索引文件的压缩等等。

    2.Terrier-InformationRetrievalPlatform
    bc3d4be8-47d4-3962-8a47-fd7184cf8e6d.jpg
    Terrier是一个高度灵活,高效的开源搜索引擎,易于部署在大型的文件集合。Terrier实现非常优秀的索引和搜索功能,为开发大型检索应用程序提供了一个理想的平台。它支持多索引策略比如:multi-pass、single-pass和大型MapReduce索引。

    3.Lemur-SearchEngine

    6de4912d-3aea-3f8f-b160-51d5642ffe76.jpg
    Lemur(狐猴)系统是CMU和UMass联合推出的一个用于自然语言模型和信息检索研究的系统。在这个系统上可以实现基于自然语言模型和传统的向量空间模型以及Okapi的adhoc或者分布式检索,可以使用结构化查询、跨语言检索、过滤、聚类等。

    Lemur可以在Windows或者Unix环境下使用,因此我们可以直接在Windows下使用Lemur。但是Lemur提供了shellscript文件来演示完整的使用lemur进行检索的过程,所以在Windows下需要安装cygwin来模拟Unix环境。Lemur还提供了一个GUI程序以及用户交互的界面的CGI,Java程序可以直接看到检索的结果,需要安装Java虚拟机,CGI程序需要Perl的解释器。

    4.Xapian-SearchEngineLibrary
    e86920dc-8023-3b9d-ad48-2d774e4bec24.jpg
    Xapian由C++编写,但可以绑定到Perl、Python、PHP、Java、Tcl、C#和Ruby甚至更多的语言。Xapian可以说是STL编程的典范,在这里您可以找到熟悉的引用计数型智能指针、容器和迭代器,甚至连命名也跟STL相似,相信一定能引起喜好C++和STL的你的共鸣(实际上,很少C++程序员完全不使用STL)。

    由于Xapian使用的是STL和C运行时库,因此具有高度可移值性,官方说法是可以运行在Linux、MacOSX、FreeBSD、NetBSD、OpenBSD、Solaris、HP-UX、Tru64和IRIX,甚至其它的Unix平台,在Windows上也跑得很好。当然,并不能像Java那样“一次编译,到处可以运行”,当移植到其它平台时,一般来说是需要重新编译的。



    揭秘 TensorFlow:Google 开源到底开的是什么?


    这两天发现朋友圈被Google开源深度学习系统TensorFlow的新闻刷屏了。这当然是一个很好的消息,尤其对我们这种用机器学习来解决实际问题的工程师来说更是如此。但同时很多人并不清楚听起来神乎其神的“TensorFlow”到底是什么,有什么意义。

    我是人工智能科技公司“出门问问”的工程师,对人工智能“深度学习”理论有一定的了解,在这里就为大家“破雾”,聊一聊Google的开源系统TensorFlow。

    什么是深度学习?

    在机器学习流行之前,都是基于规则的系统,因此做语音的需要了解语音学,做NLP的需要很多语言学知识,做深蓝需要很多国际象棋大师。

    而到后来统计方法成为主流之后,领域知识就不再那么重要,但是我们还是需要一些领域知识或者经验来提取合适的feature特征,feature的好坏往往决定了机器学习算法的成败。对于NLP来说,feature还相对比较好提取,因为语言本身就是高度的抽象;而对于Speech或者Image来说,我们人类自己也很难描述我们是怎么提取feature的。比如我们识别一只猫,我们隐隐约约觉得猫有两个眼睛一个鼻子有个长尾巴,而且它们之间有一定的空间约束关系,比如两只眼睛到鼻子的距离可能差不多。但怎么用像素来定义”眼睛“呢?如果仔细想一下就会发现很难。当然我们有很多特征提取的方法,比如提取边缘轮廓等等。

    但是人类学习似乎不需要这么复杂,我们只要给几张猫的照片给人看,他就能学习到什么是猫。人似乎能自动“学习”出feature来,你给他看了几张猫的照片,然后问猫有什么特征,他可能会隐隐预约地告诉你猫有什么特征,甚至是猫特有的特征,这些特征豹子或者老虎没有。

    深度学习为什么最近这么火,其中一个重要的原因就是不需要(太多)提取feature。

    从机器学习的使用者来说,我们以前做的大部分事情是feature engineering,然后调一些参数,一般是为了防止过拟合。而有了深度学习之后,如果我们不需要实现一个CNN或者LSTM,那么我们似乎什么也不用干。(机器让工人失业,机器学习让搞机器学习的人失业!人工智能最终的目的是让人类失业?)

    但是深度学习也不是万能的,至少现在的一个问题是它需要更强的计算能力才能训练出一个比较好的模型。它还不能像人类那样通过很少的训练样本就能学习很好的效果。

    其实神经网络提出好几十年了,为什么最近才火呢?其中一个原因就是之前它的效果并不比非深度学习算法好,比如SVM。

    到了2006年之后,随着计算能力的增强(尤其是GPU的出现),深度神经网络在很多传统的机器学习数据集上体现出优势来之后,后来用到Image和Speech,因为它自动学出的feature不需要人工提取feature,效果提升更加明显。这是否也说明,我们之前提取的图像feature都不够好,或者是根据人脑的经验提取的feature不适合机器的模型?

    很多人对深度学习颇有微词的一个理由就是它没有太多理论依据,更多的像蛮力的搜索——非常深的层数,几千万甚至上亿参数,然后调整参数拟合输入与输出。其实目前所有的机器学习都是这样,人类的大脑的学习有所不同吗,不是神经元连接的调整吗?

    但不管怎么说,从深度神经网络的使用者(我们这样的工程师)的角度来说,如果我们选定了一种网络结构,比如CNN,那么我们要做的就是根据经验,选择合适的层数,每层的神经元数量,激活函数,损失函数,正则化的参数,然后使用validation数据来判定这次训练的效果。从效果来说,一般层次越多效果越好(至少相对一两层的网络来说),但是层次越多参数也越多,训练就越慢。单机训练一个网络花几天甚至几周的时间非常常见。因此用多个节点的计算机集群来训练就是深度学习的核心竞争力——尤其对于用户数据瞬息万变的互联网应用来说更是如此。

    常见深度神经网络的训练和问题

    对于机器学习来说,训练是最关键也最困难的部分,一般的机器学习模型都是参数化的模型,我们可以把它看成一个函数y=f(w;x)。

    比如拿识别图像来说,输入x是这张图片的每个像素值,比如MNIST的数据是28*28的图片,每个点是RGB的颜色值,那么x就是一个28*28*3的向量。而一个模型有很多参数,用w表示。输出y是一个向量,比如MNIST的数据是0-9的10个数字,所以我们可以让y输出一个10维的向量,分别代表识别成0-9的置信度(概率),选择最大的那个作为我们的识别结果(当然更常见的是最后一层是softmax而不是普通的激活函数,这样这个10维向量加起来等于1,可以认为是分类的概率)。

    而训练就是给这个模型很多(x,y),然后训练的过程就是不断的调整参数w,然后使得分类错误尽可能少(由于分类错误相对w不连续因而不可求导,所以一般使用一个连续的Loss Function)。

    对于神经网络来说,标准的训练算法就是反向传播算法BackPropagation。从数学上来说就是使用(随机)梯度下降算法,求Loss Function对每个参数的梯度。另外我们也可以从另外一个角度来看反向传播算法,比如最后一层的神经网络参数,直接造成错误Loss;而倒数第二层的神经网络参数,通过这一次的激活函数影响最后一层,然后间接影响最终的输出。反向传播算法也可以看成错误不断往前传播的过程。

    由于深度神经网络的参数非常多,比如GoogleNet, 2014年ILSVRC挑战赛冠军,将Top5 的错误率降低到6.67%,它是一个22层的CNN,有5百多万个参数。所以需要强大的计算资源来训练这么深的神经网络。

    其中,CNN是Image领域常见的一种深度神经网络。由Yann LeCun提出,通过卷积来发现位置无关的feature,而且这些feature的参数是相同的,从而与全连接的神经网络相比大大减少了参数的数量。

    cnn深度神经网络

    cnn深度神经网络

    最开始的改进是使用GPU来加速训练,GPU可以看成一种SIMT的架构,和SIMD有些类似,但是执行相同指令的warp里的32个core可以有不同的代码路径。对于反向传播算法来说,基本计算就是矩阵向量乘法,对一个向量应用激活函数这样的向量化指令,而不像在传统的代码里会有很多if-else这样的逻辑判断,所以使用GPU加速非常有用。

    但即使这样,单机的计算能力还是相对有限的。

    深度学习开源工具

    从数学上来讲,深度神经网络其实不复杂,我们定义不同的网络结构,比如层次之间怎么连接,每层有多少神经元,每层的激活函数是什么。前向算法非常简单,根据网络的定义计算就好了。

    而反向传播算法就比较复杂了,所以现在有很多深度学习的开源框架来帮助我们把深度学习用到实际的系统中。

    我们可以从以下几个不同的角度来分类这些开源的深度学习框架。

    通用vs专用

    深度学习抽象到最后都是一个数学模型,相对于传统的机器学习方法来说少了很多特征抽取的工作,但是要把它用到实际的系统中还有很多事情要做。而且对于很多系统来说,深度学习只是其中的一个模块。

    拿语音识别来说,语音识别包含很多模块,比如声学模型和语言模型,现在的声学模型可以用LSTMs(一种RNN,也是一种深度学习网络)来做,但是我们需要把它融入整个系统,这就有很多工作需要做。而且目前大部分的机器学习方法包括深度学习,都必须假设训练数据和测试数据是相同(或者类似)的分布的。所以在实际的应用中,我们需要做很多数据相关的预处理工作。

    比如Kaldi,它是一个语音识别的工具,实现了语音识别的所有模块,也包括一些语音识别常用的深度神经网络模型,比如DNN和LSTM。

    而Caffe更多的是用在图像识别,它实现了CNN,因为这个模型在图像识别上效果非常好。

    框架vs库

    大部分开源的深度学习工具把整个模型都封装好了,我们只需要指定一些参数就行了。比如我们使用Caffe的CNN。

    但是还有一些工具只是提供一些基础库,比如Theano,它提供了自动求梯度的工具。

    我们可以自己定义网络的结构,我们不需要自己求梯度。使用Theano的好处是如果我们“创造”一个新的网络结构或者是很新的深度神经网络,那么其它框架很可能还没有实现,所以Theano在学术界很流行。当然坏处就是因为它不可能针对特定的模型做优化,所以可能性能不如特定的实现那么好。

    单机vs集群

    目前大部分的开源工具都是单机版的,有些支持在一个节点的多个GPU训练,但是支持GPU cluster比较少,目前支持多机训练的有GraphLab和Deeplearning4j。

    Tensor Flow到底是什么?

    Tensor张量意味着N维数组,Flow流意味着基于数据流图的计算,TensorFlow即为张量从图的一端流动到另一端。

    TensorFlow 表达了高层次的机器学习计算,大幅简化了第一代系统,并且具备更好的灵活性和可延展性。TensorFlow一大亮点是支持异构设备分布式计算,它能够在各个平台上自动运行模型,从电话、单个CPU / GPU到成百上千GPU卡组成的分布式系统。

    从目前的文档看,TensorFlow支持CNN、RNN和LSTM算法,这都是目前在Image,Speech和NLP最流行的深度神经网络模型。

    而且从Jeff Dean的论文来看,它肯定是支持集群上的训练的。

    在论文里的例子来看,这个架构有点像Spark或者Dryad等图计算模型。就像写Map-reduce代码一样,我们从高层的角度来定义我们的业务逻辑,然后这个架构帮我们调度和分配计算资源(甚至容错,比如某个计算节点挂了或者太慢)。目前开源的实现分布式Deep learning的GraphLab就是GAS的架构,我们必须按照它的抽象来编写Deep Learing代码(或者其它分布式代码,如果PageRank),而Deeplearning4j直接使用了Spark。

    Map-Reduce的思想非常简单,但是要写出一个稳定可用的工业级产品来就不容易了。而支持分布式机器学习尤其是深度学习的产品就更难了,Google的TensorFlow应该是一种抽象方式,可惜现在开源的部分并没有这些内容。有点像Google开源了一个单机版的Hadoop,可以用这种抽象(Map-reduce)来简化大数据编程,但是实际应用肯定就大大受限制了。

    深度学习能解决所有问题吗?

    至少目前来看,深度学习只是在Speech和Image这种比较“浅层”的智能问题上效果是比较明显的,而对于语言理解和推理这些问题效果就不那么好了,也许未来的深度神经网络能解决更“智能”的问题,但只是目前还不行。

    Google开源TensorFlow的意义

    这一次的Google开源深度学习系统TensorFlow在很多地方可以应用,如语音识别,自然语言理解,计算机视觉,广告等等。但是,基于以上论点,我们也不能过分夸大TensorFlow这种通用深度学习框架在一个工业界机器学习系统里的作用。在一个完整的工业界语音识别系统里, 除了深度学习算法外,还有很多工作是专业领域相关的算法,以及海量数据收集和工程系统架构的搭建。

    不过总的来说,这次谷歌的开源很有意义,尤其是对于中国的很多创业公司来说,他们大都没有能力理解并开发一个与国际同步的深度学习系统,所以TensorFlow会大大降低深度学习在各个行业中的应用难度。




    展开全文
  • 1、Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具,如数据预处理、分类、回归、聚类、关联规则以及可视化。 2.Massive Online ...
     1、Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具,如数据预处理、分类、回归、聚类、关联规则以及可视化。
    

    2.Massive Online Analysis(MOA)是一个面向数据流挖掘的流行开源框架,有着非常活跃的成长社区。它包括一系列的机器学习算法(分类、回归、聚类、异常检测、概念漂移检测和推荐系统)和评估工具。关联了WEKA项目,MOA也是用Java编写的,其扩展性更强。


    3.MEKA项目提供了一个面向多标签学习和评价方法的开源实现。在多标签分类中,我们要预测每个输入实例的多个输出变量。这与“普通”情况下只涉及一个单一目标变量的情形不同。此外,MEKA基于WEKA的机器学习工具包。

    4. Advanced Data mining And Machine learning System(ADAMS)是一种新型的柔性工作流引擎,旨在迅速建立并保持真实世界的复杂知识流,它是基于GPLv3发行的。

    5. Environment for Developing KDD-Applications Supported by Index-Structure(ELKI)是一款基于Java的开源(AGPLv3)数据挖掘软件。ELKI主要集中于算法研究,重点研究聚类分析中的无监督方法和异常检测。

    6. Mallet是一个基于Java的面向文本文件的机器学习工具包。Mallet支持分类算法,如最大熵、朴素贝叶斯和决策树分类。

    7. Encog是一个先进的机器学习框架,集成了支持向量机(SVM)、人工神经网络、遗传算法、贝叶斯网络、隐马尔可夫模型(HMM)、遗传编程和遗传算法。

    8. Datumbox机器学习框架是一个用Java编写的开源框架,允许快速地开发机器学习和统计应用。该框架的核心重点包括大量的机器学习算法以及统计测试,能够处理中等规模的数据集。

    9. Deeplearning4j是使用Java和Scala编写的第一个商业级的、开源的、分布式深入学习库。其设计的目的是用于商业环境中,而不是作为一个研究工具。

    10. Mahout是一个内置算法的机器学习框架。Mahout-Samsara帮助人们创建他们自己的数学,并提供了一些现成的算法实现。

    11.Rapid Miner是德国多特蒙特技术大学开发的。它为开发者开发应用程序提供了一个GUI(图形用户界面)和Java API。它还提供了一些机器学习算法,用来做数据处理、可视化以及建模。

    12. Apache SAMOA是 一个机器学习(ML)框架,内嵌面向分布式流ML算法的编程抽象,并且允许在没有直接处理底层分布式流处理引擎(DSPEe,如 Apache Storm、Apache S4和Apache samza)复杂性的情况下,开发新的ML算法。用户可以开发分布式流ML算法,而且可以 在多个DSPEs上执行。

    13. Neuroph通过提供支持创建、训练和保存神经网络的Java网络库和GUI工具,简化了神经网络开发。

    14. Oryx 2是一个建立在Apache Spark和Apache Kafka的Lambda架构实现,但随着实时大规模机器学习而逐渐开始专业化。这是一个用于构建应用程序的框架,但也包括打包,以及面向协同过滤、分类、回归和聚类的端到端的应用程序。

    15. Stanford Classifier是一个机器学习工具,它可以将数据项归置到一个类别。一个概率分类器,比如这个,它可以对一个数据项给出类分配的概率分布。该软件是最大熵分类器的一个Java实现。

    16.io是一个Retina API,有着快速精确的类似大脑的自然语言处理算法。

    17.JSAT是一个快速入门的机器学习库。该库是我在业余时间开发的,基于GPL3发行的。库中的一部分内容可自主学习,例如所有的代码都是独立的。JSAT没有外部依赖,而且是纯Java编写的。

    18. N-Dimensional Arrays for Java(ND4J)是一个用于JVM的科学计算库。它们是用来在生产环境中使用的,这表明例程的设计是以最小的内存需求来运行的。

    19. Java Machine Learning Library(Java机器学习库)是一系列机器学习算法的相关实现。这些算法,无论是源代码还是文档,都编写的很出色。其主要语言是Java。

    20. Java-ML是一个使用Java编写的一系列机器学习算法的Java API。它只提供了一个标准的算法接口。

    21. MLlib (Spark)是Apache Spark的可扩展机器学习库。虽然是Java,但该库与平台还支持Java,Scala和Python绑定。此库是最新的,并且算法很多。

    22. H2O是用于智能应用的机器学习API。它在大数据上对统计学、机器学习和数学进行了规模化。H2O可扩展,开发者可以在核心部分使用简单的数学知识。

    23. WalnutiQ是人脑部分面向对象模型,有着理论常用的学习算法(正在向简单强烈的情感人工智能模型方向研究)。

    24. RankLib是一个排名学习算法库。目前已经实现八种流行的算法。

    25. htm.java(基于Java的Hierarchical Temporal Memory算法实现)是一个面向智能计算的Numenta平台的Java接口。源码


    展开全文
  • 摘要: 你是一名希望开始或者正在学习机器学习Java程序员吗? 利用机器学习编写程序是最佳的学习方式。你可以从头开始编写算法,但是利用现有的... 本文介绍了主要的平台和开放源码机器学习库。 你是一

    https://yq.aliyun.com/articles/278837?utm_source=tuicool&utm_medium=referral

    摘要: 你是一名希望开始或者正在学习机器学习的Java程序员吗? 利用机器学习编写程序是最佳的学习方式。你可以从头开始编写算法,但是利用现有的开源库,你可以取得更大的进步。 本文介绍了主要的平台和开放源码的机器学习库。

    你是一名希望开始或者正在学习机器学习的Java程序员吗?

    利用机器学习编写程序是最佳的学习方式。你可以从头开始编写算法,但是利用现有的开源库,你可以取得更大的进步。

    本文介绍了主要的平台和开放源码的机器学习库。你可以使用这些机器学习库。

    环境

    本节描述了用于机器学习的Java环境或工作域。它们提供了用于执行机器学习任务的图形用户界面,还提供了用于开发自己应用程序的Java API。

    WEKA

    怀卡托环境知识分析(Weka)( https:// www.cs.waikato.ac.nz/ml/weka/)是一个由新西兰怀卡托大学开发的机器学习平台。提供Java的图形用户接口,命令行接口和Java API接口。它可能是最流行的Java机器学习库,也是开始或练习机器学习的好地方。

    06f3696f15a420ffef634af8e6aaa61aa4538b97

    KNIME

    康斯坦茨信息挖掘(KNIME)(https://www.knime. com/)是德国康斯坦茨大学开发的一个分析和报告平台。它的研发重点是药物研究,但已扩展到一般商业智能。它提供一个图形用户接口(基于Eclipse)和Java API。

    ee9700626dc448d0697f8003396f4790a0462dae
    快速挖掘

    快速挖掘(https://rapidminer.com/)由德国多特蒙德应用技术大学研发。它提供了一个GUI和一个Java API来开发自己的应用程序。还提供了数据处理、可视化和建模的机器学习算法。

    4397581256981fe8045d23f64e069b82e4710a68


    • ELKI

    ELKI是一个用于开发由索引结构支持的KDD-应用程序的环境(https://elki-project.github.io/),它是由德国慕尼黑的路德维希马克西米利安大学用Java语言开发的一款数据挖掘工作平台。它的重点是在关系型数据库中处理数据,例如异常值检测和分类(基于距离函数方法)。它提供了一个迷你GUI、命令行接口和Java API。

    5c44a5d33ae5e4543f6da1cfdf8ac0113cfd3e6d

    其实本文列出的每个项目都带有Java API库。不过在这一节中列出的这些项目仅提供了一个Java API。从狭义上来说,它们是机器学习库。

    Java-ML

    Java机器学习库(Java-ML)(http://java-ml.sourceforge.net/)提供了在Java中实现的机器学习算法的集合。它为每一种算法提供了标准接口,没有UI(用户界面),也没有引用相关的科学文献来进一步阅读。它包括数据操作、群集、特性选择和分类的方法。值得注意的是,截止本文成稿为止,它的最新一个版本是在2012年。

    JSAT

    Java统计分析工具(JSAT)(https://github.com /EdwardRaff/JSAT/tree/master)提供了一个纯Java语言实现的标准机器学习算法,用于解决中等规模的问题。JSAT的作者称他开发的这个库部分是为了进行自我学习,部分是为了完成工作。尽管如此,算法的列表还是令人印象深刻的。它包括分类、回归、合集、聚类和特征选择方法。

    Java大数据项目

    本节列出了适合大数据的Java项目,例如机器集群。

    Mahout (Hadoop)

    Apache Mahout(https://mahout.apache.org/)提供了用于实现Apache Hadoop平台(分布式映射化简)的机器学习算法。该项目主要关注集群和分类算法,一个流行的应用程序驱动实现是它在推荐系统的协作筛选中使用。还包括在单个节点上运行算法的引用实现。

    MLlib (Spark)

    Apache机器学习库(MLlib)(http://spark. apache.org/mllib/)提供了用于Apache Spark平台(HDFS,而不是映射化简)机器学习算法的实现。尽管Java库和平台支持Java、Scala和Python绑定。这个库是新的,算法的列表很短,但是增长很快。

    MOA

    大规模在线分析(MOA)(https://moa.cms. waikato.ac.nz/)是一个开源平台,由新西兰怀卡托大学的数据流挖掘设计。和Weka相同(开发在相同的地方),提供一个GUI,命令行接口和Java API。它提供了一长串的算法,重点是分类和支持离群检测,解决概念漂移。MOA使用先进的数据挖掘和机器学习系统(ADAMS)(https://adams.cms.waikato.ac.nz/)管理工作流,开发也在相同的地方。

    SAMOA

    可扩展的高级在线分析(SAMOA)(http://samoa-project.net/)是一个由雅虎开发的分布式流媒体机器学习框架。它的设计运行在Apache Storm 和 Apache S4上。系统可以利用MOA项目提供的算法来完成分类等任务。

    自然语言处理

    本节将致力于Java库和项目,用于解决来自机器学习的子领域的问题,称之为自然语言处理(NLP)。

    自然语言处理不是我的领域,所以我仅仅指出关键的库。

    • OpenNLP: Apache OpenNLP(http://opennlp. apache.org/)是处理自然语言文本的工具包,它为诸如标记化、分割和实体提取等自然语言处理任务提供了方法。
    • LingPipe:LingPipe(http://alias-i.com/lingpipe/)是计算语言学的一个工具包,包括了主题分类、实体提取、聚类和情绪分析的方法。
    • GATE: 文本工程一般结构(GATE)(http://gate.ac.uk/)是一个开源的用于文本处理的库。它提供了针对不同用例子项目的数组。
    • MALLET:机器学习语言工具包(MALLET)( http://mallet.cs.umass.edu/)是一种Java工具包,用于统计自然语言处理、文档分类、集群、主题建模和信息提取。

    计算机视觉

    本节列出了机器学习子领域库,称之为计算机视觉(VC)。

    计算机视觉不是我熟悉的领域,所以我仅仅指出关键的库。

    • BoofCV:BoofCV(http://boofcv.org/index.php?title=Main_Page)是一个用于计算机视觉和机器人应用的开放源码库。它支持图像处理、特征、几何视觉、校准、识别和图像数据输入等功能。

    深度学习

    随着深度学习方法和硬件的快速发展,神经网络又重新流行起来。本节列出了用于处理神经网络和深度学习的关键Java库。

    • EncogEncog(http://www.heatonresearch.com/encog)是一个机器学习库,提供了诸如SVM、经典神经网络、遗传编程、贝叶斯网络、HMM和遗传算法的算法。
    • Deeplearning4jDeeplearning4j(http://deeplearning4j.org/)被认为是一个用Java编写的商业级的深度学习库。它被描述为与Hadoop兼容并提供了一些算法,包括受限的Boltzmann机,深层的信念网络和堆叠的降噪自动编码器。

    总结

    在这篇文章中,当我们在Java中选择一个用于机器学习的库或平台时,我们已经接触到了大项目名称选项。这些是倍受学习者欢迎的项目,但绝不只这些列出来的。比如:看一下MLOSS.org (http://mloss.org/software/language/java/)上的这个页面,(截止本文时)它列出了71个基于java的开源机器学习项目。这是一件很重要的工作,我相信GitHub和SourceForge还有更多的工作要做。

    学习者的关键是要认真考虑自己的项目和需求。从一个库或者一个平台中找出你需要的东西,然后选择和学习一个最适合自己的项目。

    展开全文
  • 25个JAVA 机器学习工具包

    千次阅读 2017-11-20 17:54:57
    本列表总结了25个Java机器学习工具&: Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具,如数据预处理、分类、回归、聚类、关联...

    本列表总结了25个Java机器学习工具&库:

    1. Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具,如数据预处理、分类、回归、聚类、关联规则以及可视化。

    2. Massive Online Analysis(MOA)是一个面向数据流挖掘的流行开源框架,有着非常活跃的成长社区。它包括一系列的机器学习算法(分类、回归、聚类、异常检测、概念漂移检测和推荐系统)和评估工具。关联了WEKA项目,MOA也是用Java编写的,其扩展性更强。

    3. MEKA项目提供了一个面向多标签学习和评价方法的开源实现。在多标签分类中,我们要预测每个输入实例的多个输出变量。这与“普通”情况下只涉及一个单一目标变量的情形不同。此外,MEKA基于WEKA的机器学习工具包。

    4. Advanced Data mining And Machine learning System(ADAMS)是一种新型的柔性工作流引擎,旨在迅速建立并保持真实世界的复杂知识流,它是基于GPLv3发行的。

    5. Environment for Developing KDD-Applications Supported by Index-Structure(ELKI)是一款基于Java的开源(AGPLv3)数据挖掘软件。ELKI主要集中于算法研究,重点研究聚类分析中的无监督方法和异常检测。

    6. Mallet是一个基于Java的面向文本文件的机器学习工具包。Mallet支持分类算法,如最大熵、朴素贝叶斯和决策树分类。

    7. Encog是一个先进的机器学习框架,集成了支持向量机(SVM)、人工神经网络、遗传算法、贝叶斯网络、隐马尔可夫模型(HMM)、遗传编程和遗传算法。

    8. Datumbox机器学习框架是一个用Java编写的开源框架,允许快速地开发机器学习和统计应用。该框架的核心重点包括大量的机器学习算法以及统计测试,能够处理中等规模的数据集。

    9. Deeplearning4j是使用Java和Scala编写的第一个商业级的、开源的、分布式深入学习库。其设计的目的是用于商业环境中,而不是作为一个研究工具。

    10. Mahout是一个内置算法的机器学习框架。Mahout-Samsara帮助人们创建他们自己的数学,并提供了一些现成的算法实现。

    11. Rapid Miner是德国多特蒙特技术大学开发的。它为开发者开发应用程序提供了一个GUI(图形用户界面)和Java API。它还提供了一些机器学习算法,用来做数据处理、可视化以及建模。

    12. Apache SAMOA是一个机器学习(ML)框架,内嵌面向分布式流ML算法的编程抽象,并且允许在没有直接处理底层分布式流处理引擎(DSPEe,如Apache Storm、Apache S4和Apache samza)复杂性的情况下,开发新的ML算法。用户可以开发分布式流ML算法,而且可以在多个DSPEs上执行。

    13. Neuroph通过提供支持创建、训练和保存神经网络的Java网络库和GUI工具,简化了神经网络开发。

    14. Oryx 2是一个建立在Apache Spark和Apache Kafka的Lambda架构实现,但随着实时大规模机器学习而逐渐开始专业化。这是一个用于构建应用程序的框架,但也包括打包,以及面向协同过滤、分类、回归和聚类的端到端的应用程序。

    15. Stanford Classifier是一个机器学习工具,它可以将数据项归置到一个类别。一个概率分类器,比如这个,它可以对一个数据项给出类分配的概率分布。该软件是最大熵分类器的一个Java实现。

    16. io是一个Retina API,有着快速精确的类似大脑的自然语言处理算法。

    17. JSAT是一个快速入门的机器学习库。该库是我在业余时间开发的,基于GPL3发行的。库中的一部分内容可自主学习,例如所有的代码都是独立的。JSAT没有外部依赖,而且是纯Java编写的。

    18. N-Dimensional Arrays for Java(ND4J)是一个用于JVM的科学计算库。它们是用来在生产环境中使用的,这表明例程的设计是以最小的内存需求来运行的。

    19. Java Machine Learning Library(Java机器学习库)是一系列机器学习算法的相关实现。这些算法,无论是源代码还是文档,都编写的很出色。其主要语言是Java。

    20. Java-ML是一个使用Java编写的一系列机器学习算法的Java API。它只提供了一个标准的算法接口。

    21. MLlib (Spark)是Apache Spark的可扩展机器学习库。虽然是Java,但该库与平台还支持Java,Scala和Python绑定。此库是最新的,并且算法很多。

    22. H2O是用于智能应用的机器学习API。它在大数据上对统计学、机器学习和数学进行了规模化。H2O可扩展,开发者可以在核心部分使用简单的数学知识。

    23. WalnutiQ是人脑部分面向对象模型,有着理论常用的学习算法(正在向简单强烈的情感人工智能模型方向研究)。

    24. RankLib是一个排名学习算法库。目前已经实现八种流行的算法。

    25. htm.java(基于Java的Hierarchical Temporal Memory算法实现)是一个面向智能计算的Numenta平台的Java接口。源码

    展开全文
  • 25个Java机器学习工具&

    千次阅读 2015-12-25 21:42:58
    摘要:本问总结了25个Java机器学习工具&:Weka集成了数据挖掘工作的机器学习算法、面向数据流挖掘的流行开源框架(MOA)、新型的柔性工作流引擎ADAMS、基于Java的面向文本文件的机器学习工具包Mallet等。...
  • 一些Java机器学习工具和 转载自:http://www.techweb.com.cn/network/system/2015-12-28/2247800.shtml     1. Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己...
  • Java机器学习软件介绍

    2017-01-05 19:16:07
    在这篇文章中你会发现有关Java机器学习的主要平台和开放源码库包。 环境 本节描述可用于机器学习java环境或工作台。他们被称为环境,因为他们为执行机器学习任务提供了图形用户界面,但也提供了Java api供...
  • 各种机器学习库汇总

    千次阅读 2018-11-20 21:52:04
    想做机器学习,推荐下面资料:C++计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉,新颖的机器视觉 OpenCV—它提供C++, C, Python, Java 以及 MATLAB接口,并支持Windows, Linux, Android and Mac OS...
  • 八个最好的开源机器学习框架和

    千次阅读 2019-05-12 17:09:13
    利用以下最好的开源AI技术,可将你的机器学习项目提升到一个新的水平。 1.TensorFlow TensorFlow最初于2015年发布,是一款开源机器学习框架,易于在各种平台上使用和部署。它是机器学习中维护得最好和广泛...
  • 10个基于JavaScript的机器学习案例

    千次阅读 2017-05-04 09:21:12
    在过去的几年里,机器学习的开发增长很快,可用性也变得越来越可靠,而且没有减慢的趋势。一直以来Python作为机器学习的主力语言,现在神经网络可以应用任何语言了,包括JavaScript! web生态系统虽然最近一直在...
  • 机器学习系列(7)_机器学习路线图(附资料)

    万次阅读 多人点赞 2016-07-09 11:33:19
    近年来互联网数据大爆炸,数据的丰富度和覆盖面远远超出人工可以观察和总结的范畴,而机器学习的算法能指引计算机在海量数据中,挖掘出有用的价值,也使得无数学习者为之着迷。 我们不是专家,但说起算有一些从业...
  • 辗转几年Java开发,换了几份工作,没一个稳定的学习、工作过程。中间也相亲几次,都是没啥结果。换工作频繁也严重打乱了和姑娘接触的节奏。糟心工作连着遇到几次,也怪自己...Java机器学习——为啥呢? 主要有...
  • Java源码分析】Java8的String源码分析

    千次阅读 多人点赞 2019-03-01 11:50:29
    学习Java8的String源码以及相关问题的总结 1. String的定义 2. 字段属性 3. 构造函数 4. 长度和是否为空函数 5. charAt、codePointAt类型函数 6. getChar、getBytes类型函数 7. equal类函数(是否相等)...
  • Java机器学习库ML之十一线性SVM

    千次阅读 2017-06-27 16:59:22
    线性SVM的原理就不多说了,这里直接给出ML的示例代码: /** * This file is part of the Java Machine Learning Library * * The Java Machine Learning Library is free software; you can redistribute it ...
1 2 3 4 5 ... 20
收藏数 45,994
精华内容 18,397
关键字:

java 机器学习库源码