經常使用的Java機器學習庫

原文地址:http://www.javashuo.com/article/p-tcsafjnu-cx.htmljavascript

導讀:機器學習是目前盛行於世的技術之一,這幾年一時風頭無兩。雖然在機器學習中,Python是人工智能從業者使用最多的編程語言,可是,Java 在項目開發中仍然發揮着不可替代的做用,並且許多流行的機器學習框架自己就是 Java編寫的。Python 的資料處處都是,而 Java 相關的資料就相對少了不少。今天咱們翻譯了 Fatema Patrawala> 撰寫的《六大最經常使用的 Java 機器學習庫一覽》。java

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

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

Weka

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

截止到本書寫做之時,Weka 總共包含 267 個算法,其中:數據預處理(82),屬性選擇(33),分類和迴歸(133),聚類(12),關聯規則挖掘(7)。圖形界面很是適合用於探索數據,而 Java API 可讓你開發新的機器學習方案並在應用中使用這些算法。
在這裏插入圖片描述
Weka 是在 GNU 通用公共許可證(GNU GPL)下發布的,這意味着你能夠複製、分發和修改它,只要你跟蹤源文件中的更改並將其保存在 GNU GPL 下。你甚至能夠進行商業分發,但前提是你必須公開源代碼或得到商業許可證。web

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

@RELATION person_dataset @ATTRIBUTE `Name` STRING @ATTRIBUTE `Height` NUMERIC @ATTRIBUTE `Eye color`{blue, brown, green} @ATTRIBUTE `Hobbies` STRING @DATA 'Bob', 185.0, blue, 'climbing, sky diving' 'Anna', 163.0, brown, 'reading' 'Jane', 168.0, ?, ? 

 

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

Weka 的 Java API 由如下的頂層包組成:編程

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

  • 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:這些是各類決策樹算法,包括 ID三、C4.五、M五、功能樹、邏輯樹、隨機森林等。

  • 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-ML

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

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

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

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:這些是幫助和實用方法。

MALLET

機器學習語言工做包(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 格式中,以下所示:

  • Instance per file:每一個文件(即文檔)對應一個實例,MALLET 接受輸入的目錄名。

  • Instance per line:每行對應一個實例,假設使用如下格式:instance_name 標籤令牌。數據將是一個特徵向量,由做爲標記出現的不一樣單詞和它們出現次數組成。

該庫由如下包組成:

  • cc.mallet.classify:這些是用於訓練和分類實例的算法,包括 AdaBoost、Bagging、C4.五、以及其餘決策樹模型、多元邏輯迴歸、樸素貝葉斯和 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/#

下一步閱讀:

5 JavaScript machine learning libraries you need to know

A non programmer’s guide to learning Machine learning

Why use JavaScript for machine learning?

====================================================25個JAVA 機器學習工具包===============================================

原文地址:https://blog.csdn.net/zhangjianjaEE/article/details/78584956

本列表總結了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接口。

相關文章
相關標籤/搜索