Java 机器学习

您是 Java 程序员,并希望开始或练习机器学习吗?

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

在这篇文章中,您将发现可以在 Java 中使用的主要平台和开源机器学习库。

环境

本节描述可用于机器学习的基于 Java 的环境或工作台。它们被称为环境,因为它们提供了用于执行机器学习任务的图形用户界面,但也提供了用于开发您自己应用程序的 Java API。

Weka

Waikato 知识分析环境(Weka)是由新西兰怀卡托大学开发的机器学习平台。它用 Java 编写,提供图形用户界面、命令行界面和 Java API。它可能是最受欢迎的 Java 机器学习库,是开始或练习机器学习的绝佳选择。

Weka Explorer Interface with the Iris dataset loaded

加载鸢尾花数据集的Weka Explorer界面

KNIME

康斯坦茨信息挖掘器(KNIME)是由德国康斯坦茨大学开发的分析和报告平台。它最初专注于制药研究,但已扩展到通用商业智能领域。它提供图形用户界面(基于 Eclipse)和 Java API。

Screenshot of KNIME

KNIME 截图
保留部分权利

RapidMiner

RapidMiner 曾被称为 Yet Another Learning Environment (YALE),由德国多特蒙德工业大学开发。它提供了一个 GUI 和一个 Java API,用于开发您自己的应用程序。它提供了数据处理、可视化以及机器学习算法建模功能。

RapidMiner Screenshot

RapidMiner 截图

ELKI

由索引结构支持的 KDD 应用程序开发环境(ELKI)是由德国慕尼黑路德维希-马克西米利安大学用 Java 开发的数据挖掘工作台。它专注于处理关系数据库中的数据,用于异常值检测和分类(基于距离函数的方法)等任务。它提供了一个迷你 GUI、命令行界面和 Java API。

本页列出的几乎每个项目都是/有一个带有 Java API 的库,本节中列出的项目只提供 Java API。它们是狭义上的机器学习库。

Java-ML

Java 机器学习库(Java-ML)提供了用 Java 实现的机器学习算法集合。它为每个算法提供了一个标准接口,没有 UI,并提供了相关科学文献以供进一步阅读。它包括数据操作、聚类、特征选择和分类方法。请注意,在撰写本文时,最后一次发布是在 2012 年。

JSAT

Java 统计分析工具(JSAT)为中等规模问题提供了标准机器学习算法的纯 Java 实现。作者评论说,他开发该库部分是为了自学,部分是为了完成任务。尽管如此,算法列表还是令人印象深刻。它包括分类、回归、集成、聚类和特征选择方法。

大数据

本节列出了用于大数据(例如在机器集群上)的 Java 项目。

Mahout (Hadoop)

Apache Mahout 提供机器学习算法的实现,用于 Apache Hadoop 平台(分布式 MapReduce)。该项目专注于聚类和分类算法,一个流行的应用驱动实现是其在推荐系统协同过滤中的使用。还包括在单个节点上运行的算法的参考实现。

MLlib (Spark)

Apache 机器学习库 提供机器学习算法的实现,用于 Apache Spark 平台(HDFS,但不是 MapReduce)。虽然是 Java,但该库和平台支持 Java、Scala 和 Python 绑定。该库是新的,算法列表很短,但正在快速增长。

MOA

大规模在线分析(MOA)是一个由新西兰怀卡托大学设计用于数据流挖掘的开源平台。与 Weka(在同一地点开发)一样,它提供了一个 GUI、命令行界面和 Java API。它提供了大量算法,重点关注分类并支持异常值检测和概念漂移处理。MOA 使用在同一地点开发的 高级数据挖掘和机器学习系统(ADAMS)来管理工作流。

SAMOA

可扩展高级大规模在线分析(SAMOA)是由雅虎开发的分布式流式机器学习框架。它旨在在 Apache Storm 和 Apache S4 上运行。该系统可以利用 MOA 项目提供的算法来执行分类等任务。

自然语言处理

本节专门介绍用于解决机器学习子领域——自然语言处理 (NLP) 问题的 Java 库和项目。

NLP 不是我的专业领域,所以我就直接指出关键库。

  • OpenNLPApache OpenNLP 是一个用于处理自然语言文本的工具包。它提供了用于 NLP 任务的方法,如分词、分句和实体提取。
  • LingPipeLingPipe 是一个计算语言学工具包,包括主题分类、实体提取、聚类和情感分析等方法。
  • GATE文本工程通用架构 (GATE) 是一个用于文本处理的开源库。它提供了针对不同用例的一系列子项目。
  • MALLET语言工具包机器学习 (MALLET) 是一个用于统计自然语言处理、文档分类、聚类、主题建模和信息提取的 Java 工具包。

计算机视觉

本节列出了用于机器学习子领域“计算机视觉 (CV)”的库。

同样,计算机视觉不是我的专业领域,所以我就直接指出关键库。

  • BoofCVBoofCV 是一个用于计算机视觉和机器人应用的开源库。它支持图像处理、特征、几何视觉、校准、识别和图像数据 IO 等功能。

深度学习

随着深度学习方法和更快的硬件的发展,神经网络再次变得热门。本节列出了用于处理神经网络和深度学习的关键 Java 库。

  • EncogEncog 是一个机器学习库,提供 SVM、经典神经网络、遗传编程、贝叶斯网络、HMM 和遗传算法等算法。
  • Deeplearning4jDeeplearning4j 据称是一个用 Java 编写的商业级深度学习库。它被描述为与 Hadoop 兼容,并提供受限玻尔兹曼机、深度信念网络和堆叠去噪自编码器等算法。

总结

在这篇综述文章中,我们讨论了在 Java 中进行机器学习时选择库或平台时的知名选项。

这些是主要参与者和热门项目,但这绝不是一个完整的列表。例如,看看 MLOSS.org 上的这个页面,它列出了(在撰写本文时)71 个基于 Java 的开源机器学习项目。这很多,我相信 GitHub 和 SourceForge 上还有更多。

关键在于认真思考您自己的项目及其需求。弄清楚您需要从库或平台中获得什么,然后选择并学习最适合您需求的项目。

Java 机器学习的 47 条回复

  1. Kayode 2016年4月8日下午1:22 #

    这很有趣。谢谢分享。请问您以前用过MOA吗?我有一些关于MOA的问题想问。

    • Jason Brownlee 2016年4月8日下午1:33 #

      谢谢 Kayode。

      抱歉,我以前没有用过 MOA。

      • Irfan Ullah 2019年2月5日下午6:43 #

        我如何在 Weka 中使用遗传算法进行分类?

  2. Nemanja 2016年5月14日下午5:15 #

    非常感谢,这是一个非常有教育意义的网站

  3. Marcus 2016年5月24日下午7:31 #

    刚发现了 SMILE (http://haifengl.github.io/smile/)。

    看起来已经相当完整了。有人用过它吗?

    这让我考虑放弃 Java 代码中的 WEKA,有时这很麻烦。

  4. Gaurav Gupta 2016年6月13日上午2:20 #

    感谢您列出基于 Java 的 ML 库/工具。但我觉得您遗漏了 http://www.h2o.ai/。它是一个基于 Java 的 ML 和深度学习 API,可以在基于 JVM 的应用程序中调用/嵌入,请参考 – https://www.linkedin.com/pulse/calling-h2o-from-jvm-applications-raymond-peck

    • Jason Brownlee 2016年6月14日上午8:11 #

      谢谢高拉夫。

      一般来说,我会把 H2o 归类为 MLaaS,而不是 Java 库。

  5. Swaroop 2016年6月25日上午4:16 #

    很棒的信息。但是您知道在 MLlib (Spark) 部分,“Machine”的拼写是错误的。抱歉打扰,但忍不住通知您。

  6. Douglas Arantes 2016年7月1日上午1:39 #

    杰森,你能把 Smile 库添加到列表中吗?

    http://haifengl.github.io/smile/

  7. Anastasia Ananyeva 2016年7月15日下午8:42 #

    我们很荣幸地宣布,我们已将 Java-ML 网站从我的个人主机迁移到 Sourceforge。

  8. Yonas 2016年9月2日上午8:46 #

    您是否使用 RapidMiner 的 NLP API 进行过任何编程?或者尝试改进 RapidMiner 的任何文本处理模块?

    提前感谢!

  9. Gamer Gamer 2016年10月23日上午9:02 #

    嘿,杰森,我有一个用 HMM 模型预测股市的 Java 机器学习项目。我应该使用哪个库?我应该如何进行?另外,我完全是机器学习新手。请给我一个概述并尽快回复!!

  10. Nagaraj 2016年11月11日下午4:30 #

    嗨,杰森,您的网站太棒了。感谢您的帖子。

  11. Nagaraj 2016年11月11日下午4:33 #

    我希望您在机器学习项目方面有丰富的知识。那么您为什么不创办自己的产品公司呢?

    • Jason Brownlee 2016年11月12日上午7:19 #

      我更喜欢教书和帮助开发者入门,谢谢 Nagaraj。

  12. Michael 2016年12月23日上午1:19 #

    嗨,Jason,

    很棒的帖子 🙂

  13. Eyad Farouk 2017年1月17日下午11:38 #

    你好,杰森,
    首先,我从您的帖子中受益匪浅,所以我想为此表示感谢。
    其次,我想知道是否有特定的书籍可以学习 Java 中的机器学习。我前几天读了您的帖子,但所有的书都是用 Python 和 R 编写的。既然我已经是 Java 程序员,那么首先在 Java 中学习算法和构建应用程序会容易得多,而不是在 Python 中学习算法然后再切换回来。
    提前感谢。

    • Jason Brownlee 2017年1月18日上午10:15 #

      Eyad,目前我没有任何 Java 机器学习学习材料。希望未来能有。

  14. Xiaogang 2017年2月13日下午1:56 #

    非常感谢您的分享。干杯

  15. Adeel Aslam 2017年3月19日下午2:32 #

    OpenCV 2.4 版本之后全面支持 Mac 和 Java,它比 BoofCV 强得多。

  16. Avdhesh Yadav 2017年3月22日下午9:22 #

    这是一篇很棒的教程。这个领域有什么前景?如何通过规范与 EDA 工具集成,例如代码自动生成。

    谢谢 Avdhesh

    • Jason Brownlee 2017年3月23日上午8:50 #

      将 EDA 工具与代码生成相结合是一个很棒的想法。

  17. gourab 2017年4月17日上午5:16 #

    非常感谢您这篇非常有用的文章。我想学习深度学习/机器学习,其中一个系统应该从视频中检测物体并采取某些行动。您有什么建议?我应该学习哪个?我真的是新手,非常好奇。提前感谢

    • Jason Brownlee 2017年4月18日上午8:25 #

      也许是评估(分类)视频每一帧的卷积神经网络。

  18. erangaz 2017年7月29日下午3:41 #

    谢谢您这篇很棒的帖子。我需要使用机器学习创建一个网页导航代理。有没有现有的算法可以用来预测正确的导航页面?

    • Jason Brownlee 2017年7月30日上午7:38 #

      抱歉,我对这个问题不熟悉。

      也许可以在 Google 学术搜索上查阅,看看通常使用哪些方法?

  19. Priya 2018年1月3日下午4:56 #

    机器学习基本上是从人工智能通过模式识别和计算学习理论演变而来的。机器学习探索算法领域,这些算法可以对数据进行高端预测。

  20. Blerta 2018年3月18日上午11:38 #

    嗨,
    您可能会发现这个网站 http://ramok.tech/machine-learning/ 对 Java 中的计算机视觉应用程序实现很有用。

  21. Delkn 2018年4月18日下午9:56 #

    我对学习 Java 机器学习开发非常感兴趣。

  22. Saravanakumar S 2018年11月26日下午5:26 #

    杰森,你的示例章节太棒了!非常感谢!计划订购完整捆绑包!

  23. oussaifi majdi 2020年5月19日下午4:40 #

    你好,先生,
    您能帮我一下吗?我想把用户在字段中输入的单词翻译成英文,但我没有万事达卡来验证谷歌翻译 API 等。

  24. Dzung Nguyen 2021年2月25日上午5:51 #

    此链接无法使用 http://haifengl.github.io/smile/

留下回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。