天天看點

Mahout算法集

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中關于集合類的修改,使其可以适應數 據密集型項目的開發。

繼續閱讀