Apache Mahout 是 ApacheSoftware Foundation (ASF) 旗下的一個開源項目,提供一些可擴充的機器學習領域經典算法的實作,旨在幫助開發人員更加友善快捷地建立智能應用程式,并且,在 Mahout 的最近版本中還加入了對Apache Hadoop 的支援,使這些算法可以更高效的運作在雲計算環境中。
在Mahout實作的機器學習算法見下表:
算法類 | 算法名 | 中文名 |
分類算法 | Logistic Regression | 邏輯回歸 |
Bayesian | 貝葉斯 | |
SVM | 支援向量機 | |
Perceptron | 感覺器算法 | |
Neural Network | 神經網絡 | |
Random Forests | 随機森林 | |
Restricted Boltzmann Machines | 有限波爾茲曼機 | |
聚類算法 | Canopy Clustering | Canopy聚類 |
K-means Clustering | K均值算法 | |
Fuzzy K-means | 模糊K均值 | |
Expectation Maximization | EM聚類(期望最大化聚類) | |
Mean Shift Clustering | 均值漂移聚類 | |
Hierarchical Clustering | 層次聚類 | |
Dirichlet Process Clustering | 狄裡克雷過程聚類 | |
Latent Dirichlet Allocation | LDA聚類 | |
Spectral Clustering | 譜聚類 | |
關聯規則挖掘 | Parallel FP Growth Algorithm | 并行FP Growth算法 |
回歸 | Locally Weighted Linear Regression | 局部權重線性回歸 |
降維/維約簡 | Singular Value Decomposition | 奇異值分解 |
Principal Components Analysis | 主成分分析 | |
Independent Component Analysis | 獨立成分分析 | |
Gaussian Discriminative Analysis | 高斯判别分析 | |
進化算法 | 并行化了Watchmaker架構 | |
推薦/協同過濾 | Non-distributed recommenders | Taste(UserCF, ItemCF, SlopeOne) |
Distributed Recommenders | ItemCF | |
向量相似度計算 | RowSimilarityJob | 計算列間相似度 |
VectorDistanceJob | 計算向量間距離 | |
非Map-Reduce算法 | Hidden Markov Models | 隐馬爾科夫模型 |
集合方法擴充 | Collections | 擴充了Java的Collections類 |
Mahout最大的優點就是基于hadoop實作,把很多以前運作于單機上的算法,轉化為了MapReduce模式,這樣大大提升了算法可處理的資料量和處理性能。
Mahout下個性化推薦引擎Taste介紹
Taste是 Apache Mahout 提供的一個個性化推薦引擎的高效實作,該引擎基于java實作,可擴充性強,同時在mahout中對一些推薦算法進行了MapReduce程式設計模式轉化,進而可以利用hadoop的分布式架構,提高推薦算法的性能。
在Mahout0.5版本中的Taste, 實作了多種推薦算法,其中有最基本的基于使用者的和基于内容的推薦算法,也有比較高效的SlopeOne算法,以及處于研究階段的基于SVD和線性插值的算法,同時Taste還提供了擴充接口,用于定制化開發基于内容或基于模型的個性化推薦算法。
Taste 不僅僅适用于 Java 應用程式,還可以作為内部伺服器的一個元件以 HTTP 和 Web Service 的形式向外界提供推薦的邏輯。Taste 的設計使它能滿足企業對推薦引擎在性能、靈活性和可擴充性等方面的要求。
下圖展示了構成Taste的核心元件:
從上圖可見,Taste由以下幾個主要元件組成:
DataModel:DataModel是使用者喜好資訊的抽象接口,它的具體實作支援從指定類型的資料源抽取使用者喜好資訊。在Mahout0.5中,Taste 提供JDBCDataModel 和 FileDataModel兩種類的實作,分别支援從資料庫和檔案檔案系統中讀取使用者的喜好資訊。對于資料庫的讀取支援,在Mahout 0.5中隻提供了對MySQL和PostgreSQL的支援,如果資料存儲在其他資料庫,或者是把資料導入到這兩個資料庫中,或者是自行程式設計實作相應的類。
UserSimilarit和ItemSimilarity:前者用于定義兩個使用者間的相似度,後者用于定義兩個項目之間的相似度。Mahout支援大部分駐留的相似度或相關度計算方法,針對不同的資料源,需要合理選擇相似度計算方法。
UserNeighborhood:在基于使用者的推薦方法中,推薦的内容是基于找到與目前使用者喜好相似的“鄰居使用者”的方式産生的,該元件就是用來定義與目标使用者相鄰的“鄰居使用者”。是以,該元件隻有在基于使用者的推薦算法中才會被使用。
Recommender:Recommender是推薦引擎的抽象接口,Taste 中的核心元件。利用該元件就可以為指定使用者生成項目推薦清單。
Mahout源碼目錄說明
mahout項目是由多個子項目組成的,各子項目分别位于源碼的不同目錄下,下面對mahout的組成進行介紹: 1、mahout-core:核心程式子產品,位于/core目錄下; 2、mahout-math:在核心程式中使用的一些資料通用計算子產品,位于/math目錄下; 3、mahout-utils:在核心程式中使用的一些通用的工具性子產品,位于/utils目錄下; 上述三個部分是程式的主題,存儲所有mahout項目的源碼。 另外,mahout提供了樣例程式,分别在taste-web和examples目錄下: 4、taste-web:利用mahout推薦算法而建立的基于WEB的個性化推薦系統demo; 5、examples:對mahout中各種機器學習算法的應用程式; 6、bin:bin目錄下隻有一個名為mahout的檔案,是一個shell腳本檔案,用于在hadoop平台的指令行下調用mahout中的程式; 在buildtools、eclipse和distribution目錄下,有mahout相關的配置檔案 7、buildtools目錄下是用于核心程式建構的配置檔案,以mahout-buildtools的子產品名稱在mahout的pom.xml檔案中進行說明; 8、eclipse下的xml檔案是對利用eclipse開發mahout的配置說明; 9、distribution目錄下有兩個配置檔案:bin.xml和src.xml,進行mahou安裝時的一些配置資訊。 (在開發的時候一般很少對這個目錄下的檔案進行修改,是以不用太關注,知道大體什麼意思就ok) 另 外,在mahout的下載下傳位址下可以看到有個檔案夾與mahout處于同一級别,它是mahout項目的分支項目—mahout- collections,用于實作了核心程式中使用的集合類操作,該子產品獨立于mahout進行開發,是對标準jdk中關于集合類的修改,使其可以适應數 據密集型項目的開發。