Apache Mahout 是 ApacheSoftware Foundation (ASF) 旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序,並且,在 Mahout 的最近版本中還加入了對Apache Hadoop 的支持,使這些算法可以更高效的運行在雲計算環境中。
https://cwiki.apache.org/confluence/display/MAHOUT/Algorithms
網頁右面顯示的有機器學習的各種算法,包括三大塊聚類、協同過濾、分類等算法
在Mahout實現的機器學習算法見下表:
算法類 |
算法名 |
中文名 |
分類算法 |
邏輯迴歸 |
|
貝葉斯 |
||
支持向量機 |
||
感知器算法 |
||
神經網絡 |
||
隨機森林 |
||
有限波爾茲曼機 |
||
聚類算法 |
Canopy聚類 |
|
K均值算法 |
||
模糊K均值 |
||
EM聚類(期望最大化聚類) |
||
均值漂移聚類 |
||
層次聚類 |
||
狄裏克雷過程聚類 |
||
LDA聚類 |
||
譜聚類 |
||
關聯規則挖掘 |
Parallel FP Growth Algorithm |
並行FP Growth算法 |
迴歸 |
局部加權線性迴歸 |
|
降維/維約簡 |
奇異值分解 |
|
主成分分析 |
||
獨立成分分析 |
||
高斯判別分析 |
||
進化算法 |
並行化了Watchmaker框架 |
|
推薦/協同過濾 |
Non-distributed recommenders |
Taste(UserCF, ItemCF, SlopeOne) |
Distributed Recommenders |
ItemCF |
|
向量相似度計算 |
RowSimilarityJob |
計算列間相似度 |
VectorDistanceJob |
計算向量間距離 |
|
非Map-Reduce算法 |
隱馬爾科夫模型 |
|
集合方法擴展 |
擴展了java的Collections類 |
Parallel Frequent PatternMining
Boosting
Collaborative Filtering with ALS-WR
Itembased Collaborative Filtering
Machine Learning Resources
Online Passive Aggressive
Online Viterbi
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 中的核心組件。利用該組件就可以爲指定用戶生成項目推薦列表。