首頁(yè)技術(shù)文章正文

初步了解Mahout,淺談下推薦系統(tǒng)引擎

更新時(shí)間:2018-07-18 來源:黑馬程序員JavaEE培訓(xùn)學(xué)院 瀏覽量:

Mahout是Apache開源的機(jī)器學(xué)習(xí)庫(kù)。它實(shí)現(xiàn)的算法都被歸入機(jī)器學(xué)習(xí)或者集體智慧的范疇,但是在這里Mahout主要注重協(xié)同過濾/推薦引擎、聚類和分類。

Mahout是可伸縮的。Mahout致力于實(shí)現(xiàn)海量數(shù)據(jù),單機(jī)無法處理情況下的機(jī)器學(xué)習(xí)工具。在目前階段,這種可伸縮性由java實(shí)現(xiàn),有些部分基于Apache Hadoop這個(gè)分布式計(jì)算框架實(shí)現(xiàn)。

Mahout是java庫(kù)。它不支持用戶接口,預(yù)裝好的服務(wù)器。以及安裝等功能。它是一個(gè)利于開發(fā)者使用的工具框架。

自2010.4月起,Mahout成為Apache的頂級(jí)項(xiàng)目。

Mahout的大量工作不只是傳統(tǒng)的實(shí)現(xiàn)這些算法,也實(shí)現(xiàn)將這些算法,讓它們工作在hadoop之上。Hadoop的吉祥物是一頭大象,這也解釋了Mahout的工程名字。

 Mahout孵化了相當(dāng)多的技術(shù)和算法,很多都是在開發(fā)和實(shí)驗(yàn)階段。在工程的早期階段,有3個(gè)核心主題:協(xié)同過濾/推薦引擎、聚類和分類。這并不是Mahout中所有內(nèi)容,但卻是最顯著、成熟的主題。

推薦系統(tǒng)引擎

推薦引擎是目前我們使用的機(jī)器學(xué)習(xí)技術(shù)中最容易識(shí)別的。你可能已經(jīng)見過相關(guān)的服務(wù)或網(wǎng)頁(yè),基于歷史行為推薦書、電影、文檔。他們嘗試推論出用戶偏好,并標(biāo)記出用戶不知曉的、感興趣的item:

Amazon.com可能是最出名的使用推薦系統(tǒng)商務(wù)網(wǎng)站?;诮灰缀途W(wǎng)頁(yè)活性,Amazon推薦給用戶可能感興趣的書籍和其他item。

約會(huì)網(wǎng)站像Líbímseti將一部分用戶推薦給其他用戶。

社交網(wǎng)絡(luò)網(wǎng)站像Facebook用推薦技術(shù)的變形來為用戶識(shí)別最可能成為一個(gè)尚未建立聯(lián)系的朋友。

對(duì)于Amazon和示例其他網(wǎng)站,通過這種聰明的交叉銷售,推薦系統(tǒng)確實(shí)有具體的經(jīng)濟(jì)價(jià)值,同一家公司的報(bào)告指出推薦產(chǎn)品給用戶能夠帶來8-12%的銷售增長(zhǎng)。

聚類

聚類技術(shù)嘗試去將大量的擁有相同相似度的事物聚集到不同的類中。聚類是在海量或者難于理解的數(shù)據(jù)集里發(fā)現(xiàn)層次和順序,展現(xiàn)興趣模式,或使得數(shù)據(jù)集容易被理解。

Google News據(jù)為了根據(jù)具備邏輯性的故事聚集展示新聞,而不是所有文章的行列表,使用新聞文章的Topic聚集新聞。圖1.3做了說明(見附件)。

搜索引擎像Clusty基于相同的原因聚集搜索結(jié)果。

使用聚類技術(shù),基于消費(fèi)者屬性,收入、位置、購(gòu)買習(xí)慣,可將不用用戶分到不用的類中。

聚類有助于在海量的、很難弄懂的事物集合中,發(fā)現(xiàn)結(jié)構(gòu),甚至層次。企業(yè)可以使用聚類去發(fā)現(xiàn)用戶中的隱藏組,更有效的組織海量文檔集合,或者根據(jù)網(wǎng)站日志發(fā)現(xiàn)用戶的經(jīng)常使用模式。

分類

分類技術(shù)用于決定一個(gè)事物是不是屬于一種類型、類目,或者該事物是不是含有某些屬性。同樣地,分類無處不在,盡管更多的時(shí)候隱于幕后。

這些系統(tǒng)通過評(píng)估item的很多實(shí)例來學(xué)習(xí),以推導(dǎo)出分類規(guī)則。這個(gè)平常的想法可以找到很多應(yīng)用:

Yahoo! Mail決定接收的信息是不是垃圾郵件,基于先前郵件和用戶的垃圾郵件報(bào)告,以及郵件的特性。一些信息被分類為垃圾郵件。
Picasa (http://picasa.google.com/)和其他的照片管理應(yīng)用可以判斷一張照片中是否含有人臉。

光學(xué)字符識(shí)別軟件通過將小區(qū)域作為獨(dú)立字符來分類,將掃描文本的若干小區(qū)域歸類到獨(dú)立的字符上。

在iTunes中Apple’s Genius feature使用分類將歌曲劃分到不同的潛在播放列表。

分類有助于判斷一個(gè)新進(jìn)入事物是否匹配先前發(fā)現(xiàn)的模式, 也常用于分類行為或者模式。分類也可用來檢測(cè)可疑的網(wǎng)絡(luò)活動(dòng)或欺詐。也可用于根據(jù)用戶發(fā)信息判定表示失望或者滿意。

擴(kuò)展性

當(dāng)有海量、高質(zhì)量的數(shù)據(jù)輸入時(shí),這些技術(shù)都能夠達(dá)到最佳效果。在一些情況下,這些技術(shù)不僅要將海量數(shù)據(jù)作為輸入,而且需要很快計(jì)算出結(jié)果。很快,這些因素使得可擴(kuò)展性成為一個(gè)很大的問題。

依據(jù)一些粗略估計(jì),Picasa在3年前可能已經(jīng)擁有5億張照片。這意味著每天需要分析數(shù)百萬圖片。分析一張圖片并不是一個(gè)大問題,盡管需要重復(fù)數(shù)百萬次。但是,學(xué)習(xí)階段需要億萬圖片都提供相關(guān)信息 -- 上了規(guī)模的計(jì)算,使用單機(jī)是不行的。

依據(jù)一個(gè)類似的分析,Google News大約每天有350萬新文章。盡管數(shù)量并不是很大,考慮到這些文章必須和目前其他文章同時(shí)聚類,為了及時(shí)響應(yīng)計(jì)算時(shí)間需要在幾分鐘內(nèi)。

Netflix為Netflix大獎(jiǎng)發(fā)布的子集中包含1億的打分。這只是適合競(jìng)賽的數(shù)據(jù),據(jù)推測(cè),Netflix實(shí)際上擁有的和必須用于創(chuàng)建推薦系統(tǒng)的整個(gè)數(shù)據(jù)遠(yuǎn)遠(yuǎn)大于這個(gè)這個(gè)量級(jí)。

這些技術(shù)非常有必要應(yīng)用于輸入數(shù)據(jù)量很大的情形--因?yàn)楹艽螅胁贿m用于單機(jī)處理,甚至高配置的機(jī)器也不可以。所以,任何人實(shí)現(xiàn)這些技術(shù)都不能回 避可擴(kuò)展性問題。這就是為什么Mahout將可擴(kuò)展性作為最高優(yōu)先級(jí),關(guān)注可擴(kuò)展性問題,別人所沒有涉獵的一種方式,用于有效處理海量數(shù)據(jù)。

復(fù)雜的機(jī)器學(xué)習(xí)技術(shù),上規(guī)模的應(yīng)用,直到目前為止,只是一些大的、先進(jìn)的技術(shù)公司在考慮。但是,今天計(jì)算能力已經(jīng)比之前廉價(jià),借助像Hadoop這 樣的開源框架更方便。Mahout嘗試通過使用hadoop提供優(yōu)質(zhì)、開源實(shí)現(xiàn),能夠在這個(gè)規(guī)模上解決問題,解決這類困惑,并且將其送到所有技術(shù)組織的手中。

              

MapReduce and Hadoop

Mahout的一些部分使用了Apache hadoop工程,hadoop是一個(gè)開源的、基于java的MapReduce(http://labs.google.com/papers/mapreduce.html )實(shí)現(xiàn)。MapReduce是一種分布式計(jì)算框架,在Google內(nèi)部使用。它是一種編程模式,開始聽起來感覺很奇怪,或者太簡(jiǎn)單了以至于很強(qiáng)大。 MapReduce編程模式適用于輸入是key-value鍵值對(duì)集合的問題。“map”函數(shù)將這些鍵值對(duì)轉(zhuǎn)換為中間鍵值對(duì)?!癛educe”函數(shù)通過某 種方式將同一個(gè)中間鍵的值合并到一起并產(chǎn)出結(jié)果。實(shí)際上,很多問題可以設(shè)計(jì)成MapReduce問題,或者他們的一個(gè)系列。并且這種模式非常易于并行化實(shí) 現(xiàn):所有的處理過程都是獨(dú)立的,所以可以劃分到不同機(jī)器上去。

Hadoop實(shí)現(xiàn)了MapReduce模式,這是一個(gè)不小的壯舉,甚至讓MapReduce像聽起來那么簡(jiǎn)單。它管理輸入數(shù)據(jù)、中間鍵值對(duì)、輸 出數(shù)據(jù)的存儲(chǔ)。這些數(shù)據(jù)可能是海量的,需要在多臺(tái)計(jì)算機(jī)上運(yùn)行,而不只是存儲(chǔ)在某一臺(tái)機(jī)器的本地。它管理不同機(jī)器之間的劃分、數(shù)據(jù)傳輸。它負(fù)責(zé)檢測(cè)、恢復(fù) 單個(gè)機(jī)器失敗的情況。理解了有很多工作在幕后進(jìn)行能夠幫助你準(zhǔn)備使用Hadoop的相對(duì)復(fù)雜性。不只是將它作為類庫(kù)添加到你的工程中,它包含很多模塊,每 一個(gè)模塊都有若干類庫(kù)和獨(dú)立的服務(wù)器進(jìn)程,可能運(yùn)行在幾臺(tái)機(jī)器上?;贖adoop的操作處理不簡(jiǎn)單,但投入在可擴(kuò)展的、分布式實(shí)現(xiàn)可以讓你在之后有很大 的收獲:因?yàn)槟愕臄?shù)據(jù)可能成倍的增長(zhǎng),這種可擴(kuò)展的性質(zhì)對(duì)你的應(yīng)用來說是一種面向未來的方式。

你可以探索操作完整聚類的重點(diǎn)和細(xì)節(jié),調(diào)整整個(gè)框架。因?yàn)檫@個(gè)需要大量 計(jì)算能力的復(fù)雜框架變的越來越流行,所以一點(diǎn)都不奇怪,云計(jì)算已經(jīng)開始提供hadoop相關(guān)的支持。

本文版權(quán)歸黑馬程序員JavaEE學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!

作者:黑馬程序員JavaEE培訓(xùn)學(xué)院

首發(fā):http://java.itheima.com/

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!