mahout算法庫
分為三大塊
1、聚類算法
2、協同過濾算法(一般用於推薦)
協同過濾算法也可以稱為推薦算法!!!
3、分類算法
算法類 |
算法名 |
中文名 |
分類算法 |
邏輯回歸 |
|
貝葉斯 |
||
支持向量機 |
||
感知器算法 |
||
神經網絡 |
||
隨機森林 |
||
有限波爾茲曼機 |
||
聚類算法 |
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類 |
Mahout自從2008年興起以來,發展迅速,從最開始的只有推薦系統到現在的多個算法模塊,涵蓋了很多行業。這些模塊有聚類算法、分類算法、協同過濾算法和頻繁項集挖掘算法,每個模塊都含有一個或者幾個不同的實現算法,下面分別進行介紹。
協同過濾算法也可以稱為推薦算法!!!
聚類算法
聚類分析又稱為群分析,它是研究(樣品或指標)分類問題的一種統計分析方法,同時也是數據挖掘的一個重要算法。
聚類(Cluster)分析是由若干模式(Pattern)組成的,通常,模式是一個度量(Measurement)的向量,或者是多維空間中的一個點。
聚類分析以相似性為基礎,在一個聚類中的模式之間比不在同一聚類中的模式之間具有更多的相似性。
聚類的用途是很廣泛的。
例如:在商業上,聚類可以幫助市場分析人員從消費者數據庫中分出不同的消費群體來,並且概括出每一類消費者的消費模式或者說習慣。
中國有句古諺語“物以類聚,人以群分”。一個聚類即是一類物體的集合,集合中的個體是相似的,不同聚類中的個體是不相似的。
聚類的二維圖如下圖所示。
圖 聚類二維圖
針對上面的數據,我們可以很容易地把它們分為右邊陰影中的3類,這里的分類依據是不同點之間的距離:對於兩個或者多個數據點,當它們之間的距離達到一定程度的時候,我們就把它們分為一個類,采用這種方式的聚類稱做基於幾何距離的聚類。
可以看到,聚類的目的就是把一組無標簽的數據加上標簽。那么,如何去評價一個模型的好壞?如何去評判一個模型把一組無標簽的數據“完美地”貼上了標簽呢???事實上,沒有一個絕對的標准來衡量這些模型算法,所以,一般都是用戶根據自己的需要評測一個模型的好壞,而且還要求模型的參數要根據用戶的不同數據加以調整以適應具體的情況。
Mahout算法庫中聚類模塊包含的算法有:Canopy、K-Means、Fuzzy K-Means、Mean Shift、Hierarchical、Spectral、Minhash、Top Down,其中在小括號中標注“開發中”的算法其編寫還不是很完善。下面對這些算法分別進行簡要分析。
(1)Canopy算法
Canopy算法是一種非常簡單、快速的聚類方法。Canopy算法經常用於其他聚類算法的初始步驟,比如K-Means算法等。
(2)K-Means算法
K-Means算法是一種相對簡單但是廣為人知的聚類算法,一般聚類問題都可以使用聚類算法。在Mahout中,該算法在每次循環時都會新建一個任務,對於算法來說,增加了很多外部消耗。
(3)Fuzzy K-Means
Fuzzy K-Means是K-means的擴展,是一種比較簡單且流行的聚類方法。相比於K-Means聚類方法用於發現嚴格的聚類中心(即一個數據點只屬於一個聚類中心),Fuzzy K-Means聚類方法用於發現松散的聚類中心(即一個數據點可能屬於幾個聚類中心)。
(4)Mean Shift算法
Mean Shift 算法最開始應用於圖像平滑、圖像分割和跟蹤方面,在1995年一篇重要的文獻發表后,Mean Shift才被大家所了解。Mean Shift算法比較吸引人的地方是該算法不需要提前知道要聚類的類別數(K-Means算法就需要),並且該算法形成的聚類形狀是任意的且與要聚類的數據是相關的。
(5)Spectral算法
Spectral算法相對於K-Means算法來說更加有效和專業化,它是處理圖像譜分類的一種有效的算法,主要針對的數據也是圖像數據。
(6)Minhash算法
Minhash算法只負責將原始內容盡量均勻隨機地映射為一個簽名值,原理上相當於偽隨機數產生算法。對於傳統hash算法產生的兩個簽名,如果相等,說明原始內容在一定概率下是相等的;如果不相等,除了說明原始內容不相等外,不再提供任何信息,因為即使原始內容只相差一個字節,所產生的簽名也很可能差別極大。從這個意義上來說,要設計一個hash算法,使相似的內容產生的簽名也相近,是更為艱難的任務,因為它的簽名值除了提供原始內容是否相等的信息外,還能額外提供不相等的原始內容的差異程度的信息。
(7)Top Down算法
Top Down算法是分層聚類的一種,它首先尋找比較大的聚類中心,然后對這些中心進行細粒度分類。
分類算法
分類(Categorization or Classfication)就是按照某種標准給對象貼標簽(lable),再根據標簽來區分歸類。
分類是事先定義好類別,類別數不變。
案例
比如程序是區分大豆和綠豆的。我們輸入的數據是比如顏色值、半徑大小,屬於黃豆還是綠豆等等(當然這是個簡單的例子)。首先我們需要拿出一些“豆子”的數據給程序,並告訴它是黃豆還是綠豆,然后通過自己的算法,讓程序“計算”出區分兩種東西的“邊界條件”,或者簡單說就是提取特征(一般用的比較多的就是距離)。這就相當於訓練/學習等概念。
分類是一種基於訓練樣本數據(這些數據都已經被貼標簽)區分另外的樣本數據標簽的過程,即另外的樣本數據應該如何貼標簽的問題。舉一個簡單的例子,現在有一批人的血型已經被確定,並且每個人都有M個指標來描述這個人,那么這批人的M個指標數據就是訓練樣本數據(這些數據都是已經被貼好標簽了的),根據這些訓練樣本數據,建立分類器(即運用分類算法得到一些規則),然后使用分類器對測試樣本集中的未被貼標簽的數據進行血型判斷。下圖是分類算法的一般過程。
即在分類里,
訓練樣本數據(這些數據都是已經被貼好標簽的)
--->
根據這些訓練樣本數據,建立好分類器(運用分類算法得到一些規則)
--->
使用分類器對測試樣本數據(這些數據是沒有貼標簽的)
--->
做出判斷,達到分類的目的。
分類算法和聚類算法的不同之處在於,分類是有指導的學習,而聚類是一種無指導的學習。有指導和無指導其實是指在訓練的時候訓練樣本數據是否提前被貼上了標簽。
Mahout算法庫中分類模塊包含的算法有:Logistic Regression、Bayesian、Support Vector Machine、Random Forests、Hidden Markov Models。
(1)Logistic Regression
Logistic Regression是一種利用預測變量(預測變量可以是數值型,也可以是離散型)來預測事件出現概率的模型。其主要應用於生產欺詐檢測、廣告質量估計,以及定位產品預測等。在Mahout中主要使用隨機梯度下降(Stochastic Gradient Decent,SGD)思想來實現該算法。
(2)Bayesian
通常,事件A在事件B發生的條件下的概率,與事件B在事件A發生的條件下的概率是不一樣的;然而,這兩者是有確定的關系,貝葉斯(Bayesian)定理就是這種關系的陳述。通過聯系事件A與事件B,計算從一個事件產生另一事件的概率,即從結果上溯源。
在Mahout中,目前已經有兩種實現的貝葉斯分類器了,其中一種是朴素貝葉斯算法,另外一種是互補型的朴素貝葉斯算法。
(3)Support Vector Machine
Support Vector Machine(支持向量機)屬於一般化線性分類器,也可以認為是提克洛夫規范化(Tikhonov Regularization)方法的一個特例。這種分類器的特點是它能夠同時最小化經驗誤差與最大化幾何邊緣區,因此支持向量機也稱為最大邊緣區分類器。
(4)Random Forests
Random Forests(隨機森林)是一個包含多個決策樹的分類器,並且其輸出的類別由個別樹輸出的類別的眾數而定。這里的眾數是指個別樹輸出類別重復最多的一個類別數值。隨機森林算法在決策樹的基礎上發展而來,繼承了決策樹的優點,同時弱化了決策樹的缺點。
(5)Hidden Markov Models
Hidden Markov Models(隱馬爾科夫模型)主要用在機器學習上,比如語音識別、手寫識別及自然語音處理等。隱馬爾科夫模型是一個包含兩個隨機變量O和Y(O和Y可以按照順序改變它們自身的狀態)的分析模型。其中,變量Y是隱含變量,包含{y_1,…,y_n}個狀態,其狀態不能被直接檢測出來。變量Y的狀態按照一定的順序改變,其狀態改變的概率只與當前狀態有關而不隨時間改變。變量O稱為可觀察變量,包含{o_1,…,o_m}個狀態,其狀態可以被直接檢測出來。變量O的狀態與當前變量Y的狀態有關。
協調過濾
電子商務推薦系統的一種重要算法。如推薦系統
協同過濾推薦(Collaborative Filter recommendation)是在信息過濾和信息系統中正迅速成為一項很受歡迎的技術。與傳統的基於內容過濾直接分析內容進行推薦不同,協調過濾分析用戶興趣,在用戶群中找到指定用戶的相似(興趣)用戶,綜合這些相似用戶對某一信息的評價,形成系統對該指定用戶對此信息的喜好程度預測。
案例:推薦系統、商品推薦和用戶推薦。
協同過濾算法也可以稱為推薦算法!!!。在Mahout算法庫中,主要包括:Distributed Item-Based Collaborative Filtering、Collaborative Filtering using a parallel matrix factorization,下面進行簡要分析。
(1)Distributed Item-Based Collaborative Filtering
Distributed Item-Based Collaborative Filtering是基於項目的協同過濾算法,其簡單思想就是利用項目之間的相似度來為用戶進行項目推薦。項目之間的相似度通過不同用戶對該項目的評分來求出,每個項目都有一個用戶向量,兩個項目之間的相似度便是根據這個用戶向量求得的。求得項目之間的相似度,便可以針對用戶對項目的評分清單來推薦與清單中極為相似的項目。
(2)Collaborative Filtering using a parallel matrix factorization
Collaborative Filtering using a parallel matrix factorization在Mahout的介紹中是以Collaborative Filtering with ALS-WR的名稱出現的。該算法最核心的思想就是把所有的用戶以及項目想象成一個二維表格,該表格中有數據的單元格(i,j),便是第i個用戶對第j個項目的評分,然后利用該算法使用表格中有數據的單元格來預測為空的單元格。預測得到的數據即為用戶對項目的評分,然后按照預測的項目評分從高到低排序,便可以進行推薦了。
繁項集挖掘算法
在Mahout算法庫中,頻繁項集挖掘算法主要是指FP樹關聯規則算法。傳統關聯規則算法是根據數據集建立FP樹,然后對FP樹進行挖掘,得到數據庫的頻繁項集。在Mahout中實現並行FP樹關聯規則算法的主要思路是按照一定的規則把數據集分開,然后在每個分開的部分數據集建立FP樹,然后再對FP樹進行挖掘,得到頻繁項集。這里使用的是把數據集分開的規則,可以保證最后通過所有FP樹挖掘出來的頻繁項集全部加起來沒有遺漏,但是會有少量重疊。