X

Java科学计算、图像处理、机器学习、数据挖掘等工具库

一、科学计算或矩阵运算库

科学计算包:

  1. JMathLib是一个用于计算复杂数学表达式并能够图形化显示计算结果的Java开源类库。它是Matlab、Octave、FreeMat、Scilab的一个克隆,但完全采用纯Java实现。
  2. JSci:Java 科学对象(JSci)开放源代码项目是 Durham(英国 Durham)大学粒子理论中心的三年级研究生 Mark Hale 创立的。JSci 是一个包集合,包含数学和科学类。 使用 JSci,您既可以在 AWT 中也可以在 Swing 中创建简单的条形图、折线图和饼形图。 JSci.swing.JBarGraph 、 JSci.swing.JPieChart 和 JSci.swing.JLineGraph API 组件设计得也很好,这些组件和 AWT 绘图类都遵守 MVC 体系结构。
  3. JScience:http://jscience.org/ JScience 是一个Java的科学计算包
  4. jLab:jLab是数值计算的Java执行环境。该jLab环境的目的是提供一个基于Matlab / Scilab喜欢的科学计算平台所支持的脚本引擎执行的Java语言。 The current jLab
  5. ND4J:在JVM上实现快速的科学计算;ND4J是一个开源的数值计算扩展 ,它将 Python中著名的 numpy 库的很多特性带到了Java中。ND4J可以用来存储和处理大型多维矩阵。它的计算和处理速度很快,但占用的内存却很少,程序员们可以很容易地使用它来与其他JAVA或Scala库作接口。https://github.com/deeplearning4j/dl4j-examples

dl4j(DeepLearning4j): java下的一个机器学习开源项目

nd4j: dl4j使用的底层的算法库,实现的几乎所有的矩阵相关的操作

  1. Shared Scientific Toolbox:共享科学工具箱是一个用于科学和分布式计算的Java类库。它具有广泛的多方面的阵列线性代数和FFT支持;异步,高性能的网络层和诠释抽象类载入中,记录和消息传递。
  2. Colt Matrix Libary:Colt Project 提供了一组开源的高性能的科学和数学计算的 Java 库

Colt是一个高性能的数学库,由以下几个子库构成:

Colt库:基本的动态数组、稀疏矩阵、线性代数。

Jet库:数理统计、直方图。

CoreJava库:类printf的打印函数,并行计算。

  1. PETSC:PETSc(Portable, Extensible Toolkit for Scientific Computation) ,读作Pet-see,是美国能源部ODE2000支持开发的20多个ACTS工具箱之一,由Argonne国家实验室开发的可移植可扩展科学计算工具箱,主要用于在分布式存储环境高效求解偏微分方程组及相关问题。PETSc所有消息传递通信均采用MPI标准实现。线性方程组求解器是PETSc的核心组件之一,PETSc几乎提供了所有求解线性方程组的高效求解器,既有串行求解也有并行求解,既有直接法求解也有迭代法求解。
  2. Catalano:Catalano Framework 是一个 Java 和 Android 的科学计算框架。 主要计算功能: 图像处理 模糊逻辑 数学计算 统计 机器学习 神经网络

矩阵运算包:

  1. EJML:Java矩阵操作库 Efficient Java Matrix Library (EJML)这是一个比较高效率的Java矩阵运算库,提供比较全面地计算。 但是和C++的矩阵运算还是不能比。http://blog.163.com/jekyll_zhou%40126/blog/static/18204738201210642927390/ 下载网址
  2. Jama:Jama是一个基本的线性代数java包。包括一个基本的Matrix类和5个矩阵分解类。Matrix类提供了基本的线性代数数值运算的功能,https://www.cnblogs.com/zangbo/p/5622351.html
  3. UJMP (Universal Java Matrix Package)** 统一Java矩阵工具包是一个提供各种矩阵运算的Java类库。这个工具包提供了诸如稀疏矩阵和稠密矩阵的实现,以及矩阵的分解、求逆、加法、乘法,均值,方差和相关系数等运算功能. 此外还提供一些常用的线性代数运算功能,矩阵可视化功能和矩阵数据导入与导出的功能。
  4. jlbas: 矩阵向量运算库jblas,http://blog.csdn.net/golden1314521/article/details/45484529

jblas is a fast linear algebra library for Java. jblas is based on BLAS and LAPACK, the de-facto industry standard for matrix computations, and uses state-of-the-art implementations like ATLAS for all its computational routines, making jBLAS very fast.

主页地址:http://jblas.org/

该库的API文档地址:http://jblas.org/javadoc/index.html

相关例子和库文件jar包下载 http://download.csdn.net/detail/u012176591/8660849

在Java工程中我们只要 引入jar包文件就可以了。

  1. ND4J:

二、图形绘制+图像处理包:

  1. ***java的Graphics类:Java中绘制基本图形,可以使用Java类库中的Graphics类,此类位于java.awt包中。在我们自己的java程序文件中,要使用Graphics类就需要使用import java.awt.Graphics语句将Graphics类导入进来。

Graphics类提供基本的几何图形绘制方法,主要有:画线段、画矩形、画圆、画带颜色的图形、画椭圆、画圆弧、画多边形等。本项目仅用到画直线的功能,其它图形绘制请自行点击查阅Java API。

Graphics类的drawLine()方法:drawLine(int x1,int y1,int x2,int y2)

  1. Oracle提供的 Java Advanced Imaging (JAI) 库处理2D图像还可以的。
  2. ***Java Image Filters【Java Image Filters 是由 Jhlabs 开发的一组用来处理 Java 图像的类库,提供各种常用的图像处理效果,例如反转色、扭曲、水波纹、凹凸、黑白效果等等数十种效果,如下图所示,更多的效果请看其网站首页: ChannelMixFilter - Mixes the RGB channels Cont… 更多Java Image Filters信息】http://www.oschina.net/p/javaimagefilters
  3. **ImageJ:一个Java的图像处理和分析库,ImageJ是一个基于java的公共的图像处理软件,它是由National Institutes of Health开发的。可运行于Microsoft Windows,Mac OS,Mac OS X,Linux,和Sharp Zaurus PDA等多种平台。其基于java的特点, 使得它编写的程序能以applet等方式分发。

ImageJ能够显示,编辑,分析,处理,保存,打印8位,16位,32位的图片, 支持TIFF, PNG, GIF, JPEG, BMP, DICOM, FITS等多种格式。ImageJ支持图像栈功能,即在一个窗口里以多线程的形式层叠多个图像, 并行处理。只要内存允许,ImageJ能打开任意多的图像进行处理。除了基本的图像操作, 比如缩放,旋转, 扭曲, 平滑处理外,ImageJ还能进行图片的区域和像素统计, 间距,角度计算, 能创建柱状图和剖面图,进行傅里叶变换。

ImageJ是一个开放结构的软件, 支持用户自定义插件和宏。

ImageJ自带编辑器, 并且导入了java的编译器,实现了简单的IDE功能, 用户可直接基于ImageJ进行图像处理

  1. ***Sanselan:Sanselan 是一个纯 Java 的图形库,可以读写各种格式的图像文件,包括快速解析图片信息例如大小/颜色/icc以及元数据等。尽管因为是Java开发的,在处理速度上会稍微慢一 些,但具备良好的可移植性。http://www.oschina.net/p/sanselan
  2. JJIL 是一个Java 的图像处理类库,有超过60个的图像处理任务,例如可以用来识别条形码之类。JJIL 主要面向J2ME 手机应用开发
  3. ***Imagero 是 Java 的图像处理库,支持的图像类型包括:BMP, GIF, TIFF, PNG, JNG, MNG, JPEG (including CMYK and 12-bit grey), PSD, PBM, PGM, PPM, TGA, EPS, EPSI, EPSF, AI, PDF, MRW, CRW, NEF, DCR, and DNG。Imagero 可读取缩略图以及编辑图像元数据… 更多Imagero信息
  4. 商业】绘图库 DISLIN:DISLIN是一个高级别,易于使用的绘图库,支持曲线,条形图,饼图,三维彩色图,曲面,轮廓,和地图显示。支持多种输出格式,如X11的,VGA,PostScript , PDF格式,CGM, HPGL , TIFF和PNG等。绘图采用Perl解释语言 , 支持Python和Java,同时还支持大多数http://www.oschina.net/p/dislin
  5. Thumbnailator 是一个用来生成图像缩略图的 Java 类库,通过很简单的代码即可生成图片缩略图,也可直接对一整个目录的图片生成缩略图。
  6. JAI-ImageIO:

Java Advanced Imaging Image I/O Tools projects

  1. ***Marvin: Java图像处理框架 Marvin 是一个Java开发的可扩展的图像处理框架,该框架主要提供以下几方面的功能: 基本图像操作; 从视频中捕获帧; 多线程的图像处理; 通过GUI界面集成插件; 插件性能分析; 通过插件进行功能扩展。 http://www.oschina.net/p/marvin
  2. Java 图像处理框架 Processing: Processing 是一个为想要图像处理程序所提供的开源编程语言和环境,动画和互动。这是使用的学生,艺术家,设计师,研究人员和爱好者学习,原型及生产。这是建立基础教育计算机编程在视觉方面,并作为软件写生簿和专业的生产工具。http://www.oschina.net/p/processing
  3. 图像处理标签库 JImageTaglib

JImageTaglib是个用来处理图片的的标签,在服务器中生成响应的处理图片,可以对图片进行过滤(如转灰度图,边缘查找等)另外还可以用来生成条形码。

  1. Java图像处理库 jrawio:jrawio 是一个 Java Image I/O API 的服务提供者,用来处理数码相机拍摄的RAW格式的图片,包括NEF, CRW, CR2, PEF, SRF, MRW,这是一个纯 Java 的类库。
  2. OpenCL的Java库 JavaCL: JavaCL 是一个封装了 OpenCL 图形API的 Java 类库,提供很多高级的图像处理功能。http://www.oschina.net/p/javacl
  3. OpenCL库 JOCL:JOCL (Java OpenCL)提供一种简单的方式为OpenCL API添加Java binding。JOCL会提供两个级别:自动生成一个低级别的binding;还有一个需要人工编写的高级别的binding,提供一个方便的界面并将冗长降到最低。 特点: 高性能,跨平台高,http://www.oschina.net/p/jocl
  4. 三维场景图开发类库 jReality: jReality是一个Java开源的三维场景图开发类库,设计用于数学领域的3D可视化。jReality是线程安全的,拥有一个灵活的着色模型基于场景图中的一种属性继承机制,独立于设备的用户交互并且支持真正的3D Audio(JACK)。http://www.oschina.net/p/jreality
  5. ogre4j是一个可以在Java应用程序中能过JNI使用OGRE的开源项目。OGRE(Object-Oriented Graphics Rendering Engine):是一个被广泛使用的开源三维图形渲染库,成功地被应用于诸多三维仿真领域,其中包括网络游戏和一些商业的三维仿真项目)。
  6. opencv: 计算机视觉和图像处理;


三、 机器学习和深度学习库

3.1 机器学习库

  1. ***opencv:
  2. ***TensorFlow: 一个是我们最喜欢的机器学习框架,被称作无与伦比的TensorFlow框架。 TensorFlow是一个使用数据流图进行数值计算的开源软件库,是GitHub上最受欢迎的机器学习项目,也是参与者和贡献者最多的机器学习项目。TensorFlow主要是用Python编写的,但它也支持Java和Go的一些用法。
  3. ***Weka: 地址: http://www.cs.waikato.ac.nz/ml/weka/index.html 毫无疑问,Weka 是目前首选的 Java 机器学习库。完全基于 Java 环境,开源,免费,具有易于使用的图形界面,适合于数据挖掘,数据分析和预测建模等多种应用场景。Weka包括一系列的工具,如数据预处理、分类、回归、聚类、关联规则以及可视化。
  4. ***ML:Java机器学习库ML官网:http://java-ml.sourceforge.net/

Java-ML是一个使用Java编写的一系列机器学习算法的Java API。它只提供了一个标准的算法接口。对于一个机器学习库来说,最基础就是数据处理能力,ml库给了dataset和instance两个类,dataset是矩阵,instance是行(可以理解是一个list,或一个double数组)。import net.sf.javaml.core.Dataset;

import net.sf.javaml.core.DefaultDataset;

import net.sf.javaml.core.DenseInstance;

import net.sf.javaml.core.Instance;

import net.sf.javaml.core.SparseInstance;

import net.sf.javaml.tools.InstanceTools;

import net.sf.javaml.tools.data.FileHandler;

  1. **Massive Online Analysis(MOA)是一个面向数据流挖掘的流行开源框架,有着非常活跃的成长社区。它包括一系列的机器学习算法(分类、回归、聚类、异常检测、概念漂移检测和推荐系统)和评估工具。关联了WEKA项目,MOA也是用Java编写的,其扩展性更强。MOA 也是基于 Java 环境,开源,免费,在面对复杂问题时,MOA 还能和 Weka 协同工作。MOA 在运算效率和内存占用方面都做了特殊优化,通过提供易于扩展的底层结构、可复用的数据流分析设置以及一系列内部实现好机器学习算法,MOA 为实时数据流分析提供了一个非常优秀的基准框架,因此 在实时数据流挖掘领域的应用非常广泛 。其内部实现的机器学习算法包括:分类、回归、聚类、孤立点检测、概念漂移检测和推荐系统等。地址: http://moa.cms.waikato.ac.nz/
  2. ***MALLET :地址: http://mallet.cs.umass.edu/ 主要由来自麻省大学(University of Massachusetts)的Andrew McCallum教授和其学生开发,是一个基于 Java 环境的开源机器学习工具包。主要应用于统计自然语言处理,文档分类,聚类,主题建模,信息提取等 文本类分析场景 。许多功能强大的工具,包括用于文档分类的高级工具,用于序列标记的工具,和用于主题建模的工具等。MALLET 还支持各种类型的算法,包括朴素贝叶斯,决策树和最大熵等。此外,MALLET 还提供了许多例程,包括分词,删除停用词,将文本转换为向量表示等。
  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. Encog是一个先进的机器学习框架,集成了支持向量机(SVM)、人工神经网络、遗传算法、贝叶斯网络、隐马尔可夫模型(HMM)、遗传编程和遗传算法。
  9. Mahout是一个内置算法的机器学习框架。Mahout-Samsara帮助人们创建他们自己的数学,并提供了一些现成的算法实现。
  10. Rapid Miner是德国多特蒙特技术大学开发的。它为开发者开发应用程序提供了一个GUI(图形用户界面)和Java API。它还提供了一些机器学习算法,用来做数据处理、可视化以及建模。
  11. Apache SAMOA是 一个机器学习(ML)框架,内嵌面向分布式流ML算法的编程抽象,并且允许在没有直接处理底层分布式流处理引擎(DSPEe,如 Apache Storm、Apache S4和Apache samza)复杂性的情况下,开发新的ML算法。用户可以开发分布式流ML算法,而且可以 在多个DSPEs上执行。
  12. Neuroph通过提供支持创建、训练和保存神经网络的Java网络库和GUI工具,简化了神经网络开发。
  13. Oryx 2是一个建立在Apache Spark和Apache Kafka的Lambda架构实现,但随着实时大规模机器学习而逐渐开始专业化。这是一个用于构建应用程序的框架,但也包括打包,以及面向协同过滤、分类、回归和聚类的端到端的应用程序。
  14. Stanford Classifier是一个机器学习工具,它可以将数据项归置到一个类别。一个概率分类器,比如这个,它可以对一个数据项给出类分配的概率分布。该软件是最大熵分类器的一个Java实现。
  15. JSAT是一个快速入门的机器学习库。该库是我在业余时间开发的,基于GPL3发行的。库中的一部分内容可自主学习,例如所有的代码都是独立的。JSAT没有外部依赖,而且是纯Java编写的。
  16. Java Machine Learning Library(Java机器学习库)是一系列机器学习算法的相关实现。这些算法,无论是源代码还是文档,都编写的很出色。其主要语言是Java。
  17. MLlib (Spark)是Apache Spark的可扩展机器学习库。虽然是Java,但该库与平台还支持Java,Scala和Python绑定。此库是最新的,并且算法很多。
  18. H2O是用于智能应用的机器学习API。它在大数据上对统计学、机器学习和数学进行了规模化。H2O可扩展,开发者可以在核心部分使用简单的数学知识。
  19. ELKI: https://elki-project.github.io/ Environment for Developing KDD-Applications Supported by Index-Structures,即 由索引结构支持的 KDD 应用开发环境 ,Environment for Developing KDD-Applications Supported by Index-Structures,即 由索引结构支持的 KDD 应用开发环境
  20. Neo4j :Neo4j是一个世界领先的开源图形数据库。 它是由Neo技术使用Java语言完全开发的。图形数据库是以图形结构的形式存储数据的数据库。 它以节点,关系和属性的形式存储应用程序的数据。 正如RDBMS以表的“行,列”的形式存储数据,GDBMS以“图形”的形式存储数据。https://neo4j.com/ 教程:https://www.w3cschool.cn/neo4j/

3.2 深度学习库: Deeplearning4j

地址: https://deeplearning4j.org/

Deeplearning4j(Deep Learning For Java)是 Java 和 Scala 环境下的一个开源分布式的深度学习项目,由总部位于美国旧金山的商业智能和企业软件公司 Skymind 牵头开发,并得到了腾讯的投资。正如它的命名,Deeplearning4j 的运行需要 Java 虚拟机 JVM 的支持。

去年,JAXenter 社区曾提名 Deeplearning4j 作为 Java 生态系统最具创新的贡献者之一。

Deeplearning4j 旨在为工作在 Hadoop 框架下的 Java、Scala 和 Clojure 程序员提供一个可以灵活 DIY 的机器学习工具。团队在官网表示,他们希望通过一些机器学习算法的开发,将商业带入智能化数据的时代。也正是为了实现这一理想,惠及更多的用户,因此选择了移植性更好的 Java 环境来实现这些算法。目前,Deeplearning4j 在模式识别、时间序列检测和基于语音、文本的情感识别方面应用广泛,包括谷歌、Facebook和微软等巨头公司都是它的用户。

3.3 大数据处理

1) BID Data Project –能够运行快速、大规模的机器学习和数据挖掘的模式集合

2) Apache Singa  Apache Singa由新加坡国立大学的团队开发,是一个灵活可扩展的利用大数据分析的深度学习平台。这个深度学习框架为大量数据的可扩展分布式培训提供了灵活架构。Singa可扩展以运行各种硬件,主要应用在图像识别和自然语言处理(NLP)方面。

  Singa目前是一个Apache孵化器项目,提供了简单的编程模型,可以在一个节点集群上工作。分布式深度学习在训练过程中使用模型划分和并行化,一般而言,Singa支持传统的机器学习模型,如逻辑回归。

  Singa是用Java,C ++和Python编写的,可以在AWS上或通过Docker尝试使用。

3.4. Neuroph –面向对象的神经网络

neuroph是用来开发常用的神经网络构架的轻量级java框架。该框架提供了一个java库以及一个GUI工具(称为easyNeurons),你可以用它来在java项目中创建和训练自己的神经网络。

Neuroph包含一个开源的java类库和少量对应基本神经网络概念的基类。对于刚开始使用神经网络,或者想知道它们如何工作的人来说,Neuroph是个非常好的垫脚石。你可以尝试Neuroph的在线演示,看看它是怎么运行的。

四、数据挖掘和统计分析工具库

  1. WEKA:WEKA是一个可用于数据挖掘任务的机器学习算法集合。该算法可以直接应用到数据集或从自己的Java代码调用。 WEKA包含数据预处理,分类,回归,聚类,关联规则,和可视化工具。它也非常适用于开发新的机器学习方案。
  2. jmotif:时间序列、分类、数据挖掘开发库
  3. java-ml:Java机器学习库,聚类、分类、特征选择、
  4. flanagan: 数学和统计java开发库,包含回归算法,一次二次线性非线性回归算法,数据平滑算法,傅里叶变换,数值积分,插值法。http://www.ee.ucl.ac.uk/~mflanaga/java/
  5. Mahout:Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。经典算法包括聚类、分类、协同过滤、进化编程等等,并且,在 Mahout 的最近版本中还加入了对 Apache Hadoop 的支持,使这些算法可以更高效的运行在云计算环境中。
  6. JMulTi:时间序列分析开发库
  7. jfreechart:【可实现数据统计图】下载地址:http://download.csdn.net/detail/pzhtpf/4327700
  8. jcommon:【可实现数据统计图】
  9. gnujaxp:【可实现数据统计图】