6大最常用的Java機器學習庫一覽

2021-02-15 AI前線
AI 前線導讀:機器學習是目前盛行於世的技術之一,這幾年一時風頭無兩。雖然在機器學習中,Python 是人工智慧從業者使用最多的程式語言,但是,Java 在項目開發中仍然發揮著不可替代的作用,而且許多流行的機器學習框架本身就是 Java 編寫的。Python 的資料到處都是,而 Java 相關的資料就相對少了很多。今天我們翻譯了 Fatema Patrawala 撰寫的《六大最常用的 Java 機器學習庫一覽》。

更多乾貨內容請關注微信公眾號「AI 前線」(ID:ai-front)

在 MLOSS.org 網站上,列出了 70 多個基於 Java 的開源機器學習項目,可能還有更多未列出的項目,存於大學裡的伺服器、GitHub 或 Bitbucket 中。我們將在本文中回顧 Java 中的主流機器學習庫和平臺,它們能夠解決的問題類型,支持的算法以及可以使用的數據類型。

本文節選自 Machine learning in Java,由 Bostjan Kaluza 編寫,Packt Publishing Ltd. 出版

Weka 是 Waikato Environment for Knowledge Analysis(Waikato 智能分析環境)的縮寫,是紐西蘭 Waikato 大學開發的機器學習庫,也可能是最為有名的 Java 庫。Weka 是一個通用的庫,能夠解決各種機器學習任務,如分類、回歸和聚類。它具有豐富的圖形用戶界面、命令行界面和 Java API。有關 Weka 更多詳情,請參閱:http://www.cs.waikato.ac.nz/ml/weka/

截止到本書寫作之時,Weka 總共包含 267 個算法,其中:數據預處理(82),屬性選擇(33),分類和回歸(133),聚類(12),關聯規則挖掘(7)。圖形界面非常適合用於探索數據,而 Java API 可以讓你開發新的機器學習方案並在應用中使用這些算法。

Weka 是在 GNU 通用公共許可證(GNU GPL)下發布的,這意味著你可以複製、分發和修改它,只要你跟蹤源文件中的更改並將其保存在 GNU GPL 下。你甚至可以進行商業分發,但前提是你必須公開原始碼或獲得商業許可證。

除了幾種支持的文件格式外,Weka 還提供了自己的默認數據格式 ARFF,用於通過屬性 - 數據對描述數據。它由兩部分組成:第一部分包含標題頭,它指定所有屬性(即特性)及其類型;例如,標稱、數字、日期和字符串。第二部分包含數據,其中每行對應於一個實例。標題頭中的最後一個屬性隱式地被視為目標變量,缺失的數據用問號標記。例如,用 ARFF 文件格式編寫的 Bob 實例如下:

該文件由三個部分組成。第一部分以 @relation 關鍵字開始,指定數據集名稱。下一部分以 @ATTRIBUTE 關鍵字開始,後面是屬性名和類型。可用的類型是 STRING(字符串)、NUMERIC(數字)、DATE(日期)和一組分類值。最後一個屬性被隱式假設為我們想要預測的目標變量。最後一部分以 @DATA 關鍵字開始,每行後面跟著一個實例。實例值用逗號分隔,並且必須遵循與第二部分中的屬性相同的順序。

Weka 的 Java API 由以下的頂層包組成:

weka.associations:這些是關聯規則學習的數據結構和算法,包括 Apriori、 predictive apriori、FilteredAssociator、FP-Growth、Generalized Sequential Patterns (GSP)、Hotspot 和 Tertius。

weka.classifiers:這些是監督學習算法、評估期和數據結構。該包由以下幾個部分組成:

weka.classifiers.bayes:它實現了貝葉斯(Bayesian)方法,包括樸素貝葉斯、貝式網絡、貝葉斯邏輯回歸等。

weka.classifiers.evaluation:這些是評價統計、混淆矩陣、ROC 曲線等標稱和數值預測的監督評價算法。

weka.classifiers.functions:這些是回歸算法,包括線性回歸、保序回歸、高斯過程、支持向量機、多層感知器、表決感知器等。

weka.classifiers.lazy:這些是基於實例的算法,比如 k- 最近鄰、K*,惰性貝葉斯規則。

weka.classifiers.meta:這些是監督學習元算法,包括 AdaBoost、bagging、加性回歸、隨機委員會(random committee)等。

weka.classifiers.mi:這些是多實例算法,如 Citation-KNN、多樣性密度、MI AdaBoost 等。

weka.classifiers.rules:這些是基於變治法(separate-and-conquer)、Ripper、Part、Prism 的決策表和決策規格。

weka.classifiers.trees:這些是各種決策樹算法,包括 ID3、C4.5、M5、功能樹、邏輯樹、隨機森林等。

weka.clusterers:這些是聚類算法,包括 k-means、Clope、Cobweb、DBSCAN 層次聚類、Farthest 等

weka.core:這些是各種實用類、數據表示、配置文件等。

weka.datagenerators:這些是用於分類、回歸和聚類算法的數據生成器。

weka.estimators:這些是用於離散 / 標稱域、條件概率估計等的各種數據分布估計。

weka.experiment:這是一組類,支持運行實驗所需的配置、數據集、模型設置和統計信息。

weka.filters:這些是基於屬性和基於實例的選擇算法,用於監督和非監督數據預處理。

weka.gui:這些是實現 Explorer、Experimenter、和 Knowledge Flow 的圖形界面。Explorer 允許你調查數據集、算法及其參數,並使用散點圖和其他可視化的形式對數據集進行可視化。Experimenter 用於設計批量實驗,但它只能用於分類和回歸問題。Knowledge Flow 實現了可視化的拖放式用戶界面來構建數據流,如:加載數據、應用過濾器、構建分類器和評估。

Java 機器學習庫(Java-ML)是一組機器學習算法的集合,具備用於相同類型的算法的公共接口。它只提供 Java API,因此,它主要面向的是軟體工程師和程式設計師。Java-ML 包含用於數據預處理、特徵選擇、分類和聚類的算法。此外,它還提供了幾個 Weka 橋來直接通過 Java-ML API 訪問 Weka 的算法。Java-ML 可從 http://java-ml.sourceforge.net 下載,截至本書完成之際,最近版本發布於 2012 年。

Java-ML 也是一個通用機器學習庫。與 Weka 相比,它提供了更為一致的接口和最新算法的實現,在其他包中不存在這些算法,如一系列最先進的相似性度量和特徵選擇技術等,這些包含動態時間規整、隨機森林屬性評估等等。Java-ML 也可以在 GNU GPL 許可證下使用。

Java-ML 支持任何類型的文件,只要它每行包含一個數據樣本,並且特徵用逗號、分號和制表符分隔。

Java-ML 庫由以下頂層包組成:

net.sf.javaml.classification:這些是分類算法,包括樸素貝葉斯、隨機森林、Bagging、自組織映射、k- 最近鄰等。

net.sf.javaml.clustering:這些是聚類算法,包括 kmeans、自組織映射、空間聚類、Cobweb、AQBC 等。

net.sf.javaml.core:這些表示實例和數據集。

net.sf.javaml.distance:這些是測量實例距離和相似度的算法,如切比雪夫距離(Chebyshev distance)、餘弦距離 / 相似度、歐幾裡得距離(Euclidian distance)、傑卡德距離(Jaccard distance)/ 相似度、馬氏距離(Mahalanobis distance)、曼哈頓距離(Manhattan distance)、明氏距離(Minkowski distance)、皮爾遜積矩相關係數(Pearson correlation coefficient)、斯皮爾曼簡捷距離(Spearman's footrule distance)、動態時間規整(dynamic time wrapping,DTW)等。

net.sf.javaml.featureselection:這些是用於特徵評估、評分、選擇和排名的算法,如增益比、ReliefF、Kullback-Liebler 散度、對稱不確定性等。

net.sf.javaml.filter:這些是通過過濾、刪除屬性、設置類或屬性值等操作實例的方法。

net.sf.javaml.matrix:實現內存或基於文件的數組。

net.sf.javaml.sampling:實現選擇數據集子集的採樣算法。net.sf.javaml.tools:這些是關於數據集、實例操作、序列化、Weka API 接口等的使用方法。

net.sf.javaml.utils:這些是算法的實用方法,如統計、數學方法、列聯表等表等。

Apache Mahout 項目旨在構建可擴展的機器學習庫。它是在可擴展分布式體系結構(如 Hadoop)上構建的,實用 MapReduce 範例,這是一種實用伺服器集群處理和生成具有並行分布式算法的大型數據及的方法。

Mahout 提供了控制臺界面和 Java API,可用於聚類、分類和寫作過濾的可擴展算法。它可以解決這三個業務問題:項目推薦,如向喜歡某部電影的人推薦其他可能喜歡的電影;聚類,如將文本文檔分組與主題相關的文檔組中歸檔;分類,如學習將哪個主題分配給未標記的文檔。

Mahout 是在商業化的 Apache 許可證下分發的,這意味著只要你保留 Apache 許可證並將其顯示在程序的版權聲明中,你就可以使用它。

Mahout 提供了以下庫:

org.apache.mahout.cf.taste:這些是基於用戶和基於項目的協同過濾算法,及基於 ALS 的矩陣分解算法。

org.apache.mahout.classifier:這些是內存和分布式實現,包括邏輯回歸、樸素貝葉斯、隨機森林、隱馬爾科夫模型(hidden Markov models,HMM)和多層感知器。

org.apache.mahout.clustering:這些是聚類算法,例如 Canopy 聚類、k-means、模糊 k-means、流式 K-means 和譜聚類。

org.apache.mahout.common:這些是算法的實用方法,包括距離、MapReduce 操作、迭代器等。

org.apache.mahout.driver:實現了通用驅動程序來運行其他類的主要方法。

org.apache.mahout.ep:這是使用記錄步驟突變的進化優化。

org.apache.mahout.math:這些是 Hadoop 中的各種數據額實用方法和實現。

org.apache.mahout.vectorizer:這些是用於數據表示、操作和 MapReduce 任務的類。

Apache Spark(或簡稱 Spark)是在 Hadoop 上構建大規模數據處理的平臺,但與 Mahout 不同的是,它與 MapReduce 範式無關。相反,它使用內存緩存提取工作數據集,對其進行處理並重複查詢。據報導,Spark 直接處理磁碟存儲數據的速度是 Mahout 實現的十倍。可從 https://spark.apache.org 下載。

在 Spark 之上構建了許多模塊,例如用於圖形處理的 GraphX、用於處理實時數據流的 Spark Streaming 和用於機器學習庫的 MLlib,這些模塊具有分類、回歸、協同過濾、聚類、降維和優化。

Spark 的 MLlib 可以使用基於 Hadoop 的數據源,例如 Hadoop 分布式文件系統(HDFS)或 HBase,以及本地文件。支持的數據類型包括以下幾種:

局部向量存儲在一臺機器上。稠密向量表示為雙類型值數組,如 (2.0,0.0,10.,0.0);而稀疏向量由向量的大小、索引數組和值數組表示,如 [4, (0, 2), (2.0, 1.0)]。

標記點用於監督學習算法,由局部向量組成,用雙類型的類值標記。標籤可以是類索引、二進位結果或多個類索引的列表(多類分類)。例如,標記的稠密向量表示為 [1.0, (2.0, 0.0, 1.0, 0.0)]。

局部矩陣在單臺機器上存儲稠密矩陣。它由矩陣維數和以列主序排列的單個雙數組定義。

分布式矩陣對存儲在 Spark 的彈性分布式數據集(Resilient Distributed Dataset,RDD)中的數據進行操作,RDD 表示可以並行操作的元素集合。有三種表示:行矩陣,其中每一行都是可以存儲在一臺機器上的局部向量,但行索引沒有意義;索引行矩陣,類似於行矩陣,但行索引是有意義的,即可以識別行並執行行連接;坐標矩陣,當行不能存儲在一臺機器上,且矩陣非常稀疏時才使用。

Spark 的 MLlib API 庫提供了各種學習算法和實用工具的接口,如下所示:

org.apache.spark.mllib.classification:這些是二元和多類分類算法,包括線性 SVM、邏輯回歸、決策樹和樸素貝葉斯。

org.apache.spark.mllib.clustering:這些是 k-means 聚類。

org.apache.spark.mllib.linalg:這些是數據表示,包括稠密向量、稀疏向量和矩陣。

org.apache.spark.mllib.optimization:這是 MLlib 中作為低級基元的各種優化算法,包括梯度下降、隨機梯度下降、分布式 SGD 的更新方案和有限內存 BFGS。

org.apache.spark.mllib.recommendation:這些是基於模型的協同過濾,通過交替最小二乘矩陣分解來實現。

org.apache.spark.mllib.regression:這些是回歸學習算法,如線性最小二乘、決策樹、Lasso 和 Ridge 回歸。

org.apache.spark.mllib.stat:這些是稀疏或稠密向量格式的樣本的統計函數,用於計算均值、方差、最小值、最大值、計數和非零計數。org.apache.spark.mllib.tree:實現了分類和回歸決策樹的算法。

org.apache.spark.mllib.util:這些是用於加載、保存、預處理、生成和驗證數據的方法的集合。

DeepLearning4j(或稱 DL4J),是一個用 Java 編寫的深度學習庫。它具有分布式和單機深度學習框架,包括並支持各種神經網絡結構,如前饋神經網絡、RBM(Restricted Boltzmann Machine,受限玻爾茲曼機)、卷積神經網絡、深度信念網絡、自動編碼器等。DL4J 可以解決不同的問題,比如識別面孔、聲音、垃圾郵件和電子商務欺詐。

Deeplearning4j 也是在 Apache 2.0 許可下分發的,可從 http://deeplearning4j.org 下載。該庫由以下組成:

org.deeplearning4j.base:這些是加載類。

org.deeplearning4j.berkeley:這些是數學使用方法。

org.deeplearning4j.clustering:k-means 的聚類實現。

org.deeplearning4j.datasets:這是數據集的操作,包括導入、創建、迭代等。

org.deeplearning4j.distributions:這是用於分發的實用方法。

org.deeplearning4j.eval:這些是評估類,包括混淆矩陣。

org.deeplearning4j.exceptions:實現異常處理程序。

org.deeplearning4j.models:這些是監督學習算法,包括深度信念網絡、堆疊式自動編碼器、堆疊去噪式自動編碼器和 RBM。

org.deeplearning4j.nn:這些是基於神經網絡的組件和算法的實現,例如神經網絡、多層網絡、卷積多層網絡等。

org.deeplearning4j.optimize:這些是神經網絡優化算法,包括反向傳播、多層優化、輸出層優化等。

org.deeplearning4j.plot:這些是用於呈現數據的各種方法。

org.deeplearning4j.rng:這是一個隨機數據生成器。

org.deeplearning4j.util:這些是幫助和實用方法。

機器學習語言工作包(Machine Learning for Language Toolkit,MALLET),是一個包含自然語言處理算法和實用程序的大型庫。它可以用於各種任務,如文檔分類、分檔聚類、信息提取和主題建模。MALLET 提供了命令行界面和 Java API,適用於多種算法,如樸素貝葉斯、HMM(Hidden Markov Model,隱馬爾可夫模型)、隱含狄利克主題模型(Latent Dirichlet topic model)、邏輯回歸和條件隨機域(conditional random fields)。

MALLET 可以在通用公共許可證 1.0 下使用,這意味著你甚至可以在商業應用程式中使用它。可以從 http://mallet.cs.umass.edu 下載。MALLET 實例由名稱、標籤、數據和源表示。但是,有兩種方法可以將數據導入到 MALLET 格式中,如下所示:

該庫由以下包組成:

cc.mallet.classify:這些是用於訓練和分類實例的算法,包括 AdaBoost、Bagging、C4.5、以及其他決策樹模型、多元邏輯回歸、樸素貝葉斯和 Winnow2。

cc.mallet.cluster:這些是無監督聚類算法,包括貪心凝聚( greedy agglomerative)、爬山算法(hill climbing)、k-best 和 k-means 聚類。

cc.mallet.extract:實現分詞器(tokenizers)、文檔提取器、文檔查看器和清理器等。

cc.mallet.fst: 實現了序列模型,包括條件隨機域、HMM、最大熵馬爾科夫模型(maximum entropy Markov models),以及相應的算法和評估器。

cc.mallet.grmm:實現了如推理算法、學習和測試的圖形模型和因子圖。例如環狀信念傳播(loopy belief propagation)、吉布斯採樣(Gibbs sampling)等。

cc.mallet.optimize:這些是用於尋找函數最大值的優化算法,例如梯度上升、有限內存 BFGS、隨機元上升(stochastic meta ascent)等。

cc.mallet.pipe:這些方法是將數據處理為 MALLET 實例中的管道。cc.mallet.topics:這些是主題建模算法,例如隱含狄利克分布(Latent Dirichlet allocation)、四級彈球分布(four-level pachinko allocation)、分層 PAM、DMRT 等。

cc.mallet.types:實現了基本數據類型,如數據集、特徵向量、實例和標籤。

cc.mallet.util:這些是各種實用工具功能,如命令行處理、搜索、數學、測試等。

如果你想利用關鍵的 Java 機器學習庫進行設計、構建和部署你自己的機器學習應用,請查閱 Packt Publishing 出版社出版的《Java 機器學習》(Machine Learning in Java)一書。

原文連結:

https://hub.packtpub.com/most-commonly-used-java-machine-learning-libraries/

相關焦點

  • 25個Java機器學習工具&庫
    6. Mallet是一個基於Java的面向文本文件的機器學習工具包。Mallet支持分類算法,如最大熵、樸素貝葉斯和決策樹分類。7. Encog是一個先進的機器學習框架,集成了支持向量機(SVM)、人工神經網絡、遺傳算法、貝葉斯網絡、隱馬爾可夫模型(HMM)、遺傳編程和遺傳算法。8.
  • 機器學習 | 四大常用機器學習Python庫介紹
    點擊下方公眾號,回復資料,收穫驚喜今天這篇我們介紹下Python中常用的機器學習庫(機器(機器學習、深度學習啥的,小編還是建議使用Python進行建模編寫哈),也算是本公號機器學習的第一篇推文,主要內容如下:深度學習常用四大Python庫這一部分我們簡單介紹下Python中的常用的機器學習庫,算是比較入門的介紹哈,具體包括Scikit-learn、Keras、TensorFlow和PyTorch,下面我們就一一簡單介紹:
  • 8大Python機器學習庫
    正因如此,我們決定推出一系列介紹各領域頂級 Python 庫文章:8大Python機器學習庫X大Python人工智慧庫 - 即將推出,敬請期待X大Python深度學習庫 - 即將推出,敬請期待X大Python數據科學庫 - 即將推出,敬請期待我們的榜單其實非常主觀,有些庫可以納入多個領域,比如, 本文中有 Keras
  • 常用python機器學習庫總結
    眾所周知現在人工智慧非常的火熱,機器學習也算是人工智慧中的一個領域,在其中有一塊是對文本進行分析,對數據進行深入的挖掘提取一些特徵值,然後用一些算法去學習,訓練,分析,甚至還能預測,我們就來看看python有哪些機器學習庫吧!1.
  • python機器學習:常用庫的介紹及安裝
    現在,隨著人工智慧的興起,機器學習越來越被各行業看重,從而使得人工智慧的需求會越來越大。今天,我們就從零基礎開始學習人工智慧的基礎篇——機器學習。工欲善其事必先利其器,所以,我們首先來看一下,我們要學習這些東西,需要準備些什麼!首先電腦一臺,這是必備的。下面我們來看一下需要安裝些什麼軟體到電腦上!
  • 38個常用Python庫:數值計算、可視化、機器學習等8大領域都有了
    一、數值計算數值計算是數據挖掘、機器學習的基礎。Python提供多種強大的擴展庫用於數值計算,常用的數值計算庫如下所示。1. NumPy支持多維數組與矩陣運算,也針對數組運算提供大量的數學函數庫。三、Web開發Web應用開發可以說是目前軟體開發中最重要的部分。Python提供各種Web開發框架,幫助使用者快速實現功能開發。常用的Python網絡開發類庫如下所示。12.
  • Oracle 開源 Java 機器學習庫 Tribuo
    近日,Oracle 開源了一個用 Java 編寫的機器學習庫,名為 Tribuo。
  • 常用Python機器學習庫有哪些?
    從事Python開發,所從事的工作機會和工作崗位及工作內容可選擇的餘地很多,可從事大數據、數據分析師、人工智慧工程師等方向,未來發展的空間大。也因為這個原因,很多同學開始了Python機器學習。Python機器學習庫有很多,接下來給大家介紹3個比較受大家歡迎的。
  • 機器學習最主流的算法庫sklearn
    「 scikit-learn,簡稱sklearn,是用Python語言開發的機器學習模塊庫,其包含大量的機器學習算法和測試數據集
  • 盤點:為 Java 開發者量身定製的五款機器學習庫
    :機器學習是目前最炙手可熱的技術之一,各大公司都在積極招聘相關的編程人才,來填補機器學習和深度學習代碼編寫的空缺。誠然,根據相關的招聘統計數據,Python 語言目前已經超越 Java 成為僱主最亟須的機器學習編程技能。但事實上,Java 在項目開發中仍然發揮著不可替代的作用,並且許多流行的機器學習框架本身就是由 Java 寫成的。
  • 菜鳥學機器學習,Sklearn庫主要模塊功能簡介
    sklearn,全稱scikit-learn,是python中的機器學習庫,建立在numpy、scipy、matplotlib等數據科學包的基礎之上,涵蓋了機器學習中的樣例數據、數據預處理、模型驗證、特徵選擇、分類、回歸、聚類、降維等幾乎所有環節,功能十分強大,目前sklearn版本是0.23。
  • 大數據機器學習庫spark mllib基礎及應用案例
    近日,飛馬網邀請業內資深大數據研發專家董西成為大家在線講解了大數據機器學習庫spark mllib基礎及應用案例。
  • 【每周一庫】- Rusty-Machine 機器學習庫
    The rusty-machine一種拆包即用的機器學習模塊。
  • Python 機器學習庫 Top 10,你值得擁有!
    新智元推薦 編譯:優達學員 - kevin 原作:Mantra Malhotra(源文地址見下)【新智元導讀】Python 超越許多其他程式語言,成為機器學習領域中最熱門最常用的程式語言之一Python 在眾多開發者中如此受追捧的原因之一便是其擁有大量的與機器學習相關的開源框架以及工具庫,本文介紹了其中最受歡迎的10大Python庫。
  • 2020年六大機器學習Python庫!
    外頭有許多類型的python庫可用,本文介紹了一些流行的機器學習庫。1. NumPy:NumPy是一種通用的數組處理軟體包。它提供高性能的多維數組對象和用於處理這些數組的工具。它是用於科學計算的基本Python軟體包。
  • Python語言下的機器學習庫
    這篇文章的目的就是列舉並描述Python可用的最有用的機器學習工具和庫。這個列表中,我們不要求這些庫是用Python寫的,只要有Python接口就夠了。我們在最後也有一小節關於深度學習(Deep Learning)的內容,因為它最近也吸引了相當多的關注。
  • 最好的Python機器學習庫
    引言毫無疑問,神經網絡和機器學習在過去幾年一直是高科技領域最熱門的話題之一。這一點很容易看出,因為它們解決了很多真正有趣的用例,如語音識別、圖像識別、甚至是樂曲譜寫。因此,在這篇文章,我決定編制一份囊括一些很好的Python機器學習庫的清單,並將其張貼在下面。
  • 使用Python進行機器學習常用的第三方庫
    使用Python編程就不得不提到它強大的第三方庫,那在我們的機器學習中,我們會使用到哪些第三方庫呢?接下來我為大家進行介紹;NumPy&SciPyNumPy時Python最為基礎的編程庫。Scikit-learnScikit-learn是機器學習的核心程序庫,依託於上面的幾種工具包,封裝了大量經典以及最新的機器學習模型。作為一款用於機器學習和實踐的Python第三方開源程序庫,Scikit-learn無疑是成功的。無論是其出色的藉口設計,還是高效的學習能力,都使它成為了核心工具包。
  • 機器學習算法 Java 庫 Smile 1.5.0 發布,引入新特性
    機器學習算法 Java 庫 Smile 1.5.0 已發布。
  • 數據科學和機器學習的最佳Python庫
    數據科學和機器學習是該時代最需求的技術,這一需求促使每個人都學習不同的庫和軟體包以實現它們。這篇博客文章將重點介紹用於數據科學和機器學習的Python庫。這些是您掌握市場上最被炒作的兩項技能的庫。以下是此博客中將涉及的主題列表:數據科學與機器學習導論為什麼要使用Python進行數據科學和機器學習?