全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

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

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

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

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

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

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

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

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

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

推薦系統(tǒng)引擎

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

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

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

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

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

聚類(lèi)

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

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

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

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

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

分類(lèi)

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

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

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

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

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

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

擴(kuò)展性

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

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

依據(jù)一個(gè)類(lèi)似的分析,Google News大約每天有350萬(wàn)新文章。盡管數(shù)量并不是很大,考慮到這些文章必須和目前其他文章同時(shí)聚類(lèi),為了及時(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)楹艽?,所有不適用于單機(jī)處理,甚至高配置的機(jī)器也不可以。所以,任何人實(shí)現(xiàn)這些技術(shù)都不能回 避可擴(kuò)展性問(wèn)題。這就是為什么Mahout將可擴(kuò)展性作為最高優(yōu)先級(jí),關(guān)注可擴(kuò)展性問(wèn)題,別人所沒(méi)有涉獵的一種方式,用于有效處理海量數(shù)據(jù)。

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

              

MapReduce and Hadoop

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

Hadoop實(shí)現(xiàn)了MapReduce模式,這是一個(gè)不小的壯舉,甚至讓MapReduce像聽(tīng)起來(lái)那么簡(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ù)雜性。不只是將它作為類(lèi)庫(kù)添加到你的工程中,它包含很多模塊,每 一個(gè)模塊都有若干類(lèi)庫(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)用來(lái)說(shuō)是一種面向未來(lái)的方式。

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

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

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

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

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