更新時間:2018-07-18 來源:黑馬程序員JavaEE培訓學院 瀏覽量:
Mahout是Apache開源的機器學習庫。它實現(xiàn)的算法都被歸入機器學習或者集體智慧的范疇,但是在這里Mahout主要注重協(xié)同過濾/推薦引擎、聚類和分類。
Mahout是可伸縮的。Mahout致力于實現(xiàn)海量數(shù)據(jù),單機無法處理情況下的機器學習工具。在目前階段,這種可伸縮性由java實現(xiàn),有些部分基于Apache Hadoop這個分布式計算框架實現(xiàn)。
Mahout是java庫。它不支持用戶接口,預裝好的服務器。以及安裝等功能。它是一個利于開發(fā)者使用的工具框架。
自2010.4月起,Mahout成為Apache的頂級項目。
Mahout的大量工作不只是傳統(tǒng)的實現(xiàn)這些算法,也實現(xiàn)將這些算法,讓它們工作在hadoop之上。Hadoop的吉祥物是一頭大象,這也解釋了Mahout的工程名字。
Mahout孵化了相當多的技術(shù)和算法,很多都是在開發(fā)和實驗階段。在工程的早期階段,有3個核心主題:協(xié)同過濾/推薦引擎、聚類和分類。這并不是Mahout中所有內(nèi)容,但卻是最顯著、成熟的主題。
推薦系統(tǒng)引擎
推薦引擎是目前我們使用的機器學習技術(shù)中最容易識別的。你可能已經(jīng)見過相關(guān)的服務或網(wǎng)頁,基于歷史行為推薦書、電影、文檔。他們嘗試推論出用戶偏好,并標記出用戶不知曉的、感興趣的item:
Amazon.com可能是最出名的使用推薦系統(tǒng)商務網(wǎng)站。基于交易和網(wǎng)頁活性,Amazon推薦給用戶可能感興趣的書籍和其他item。
約會網(wǎng)站像Líbímseti將一部分用戶推薦給其他用戶。
社交網(wǎng)絡網(wǎng)站像Facebook用推薦技術(shù)的變形來為用戶識別最可能成為一個尚未建立聯(lián)系的朋友。
對于Amazon和示例其他網(wǎng)站,通過這種聰明的交叉銷售,推薦系統(tǒng)確實有具體的經(jīng)濟價值,同一家公司的報告指出推薦產(chǎn)品給用戶能夠帶來8-12%的銷售增長。
聚類
聚類技術(shù)嘗試去將大量的擁有相同相似度的事物聚集到不同的類中。聚類是在海量或者難于理解的數(shù)據(jù)集里發(fā)現(xiàn)層次和順序,展現(xiàn)興趣模式,或使得數(shù)據(jù)集容易被理解。
Google News據(jù)為了根據(jù)具備邏輯性的故事聚集展示新聞,而不是所有文章的行列表,使用新聞文章的Topic聚集新聞。圖1.3做了說明(見附件)。
搜索引擎像Clusty基于相同的原因聚集搜索結(jié)果。
使用聚類技術(shù),基于消費者屬性,收入、位置、購買習慣,可將不用用戶分到不用的類中。
聚類有助于在海量的、很難弄懂的事物集合中,發(fā)現(xiàn)結(jié)構(gòu),甚至層次。企業(yè)可以使用聚類去發(fā)現(xiàn)用戶中的隱藏組,更有效的組織海量文檔集合,或者根據(jù)網(wǎng)站日志發(fā)現(xiàn)用戶的經(jīng)常使用模式。
分類
分類技術(shù)用于決定一個事物是不是屬于一種類型、類目,或者該事物是不是含有某些屬性。同樣地,分類無處不在,盡管更多的時候隱于幕后。
這些系統(tǒng)通過評估item的很多實例來學習,以推導出分類規(guī)則。這個平常的想法可以找到很多應用:
Yahoo! Mail決定接收的信息是不是垃圾郵件,基于先前郵件和用戶的垃圾郵件報告,以及郵件的特性。一些信息被分類為垃圾郵件。
Picasa (http://picasa.google.com/)和其他的照片管理應用可以判斷一張照片中是否含有人臉。
光學字符識別軟件通過將小區(qū)域作為獨立字符來分類,將掃描文本的若干小區(qū)域歸類到獨立的字符上。
在iTunes中Apple’s Genius feature使用分類將歌曲劃分到不同的潛在播放列表。
分類有助于判斷一個新進入事物是否匹配先前發(fā)現(xiàn)的模式, 也常用于分類行為或者模式。分類也可用來檢測可疑的網(wǎng)絡活動或欺詐。也可用于根據(jù)用戶發(fā)信息判定表示失望或者滿意。
擴展性
當有海量、高質(zhì)量的數(shù)據(jù)輸入時,這些技術(shù)都能夠達到最佳效果。在一些情況下,這些技術(shù)不僅要將海量數(shù)據(jù)作為輸入,而且需要很快計算出結(jié)果。很快,這些因素使得可擴展性成為一個很大的問題。
依據(jù)一些粗略估計,Picasa在3年前可能已經(jīng)擁有5億張照片。這意味著每天需要分析數(shù)百萬圖片。分析一張圖片并不是一個大問題,盡管需要重復數(shù)百萬次。但是,學習階段需要億萬圖片都提供相關(guān)信息 -- 上了規(guī)模的計算,使用單機是不行的。
依據(jù)一個類似的分析,Google News大約每天有350萬新文章。盡管數(shù)量并不是很大,考慮到這些文章必須和目前其他文章同時聚類,為了及時響應計算時間需要在幾分鐘內(nèi)。
Netflix為Netflix大獎發(fā)布的子集中包含1億的打分。這只是適合競賽的數(shù)據(jù),據(jù)推測,Netflix實際上擁有的和必須用于創(chuàng)建推薦系統(tǒng)的整個數(shù)據(jù)遠遠大于這個這個量級。
這些技術(shù)非常有必要應用于輸入數(shù)據(jù)量很大的情形--因為很大,所有不適用于單機處理,甚至高配置的機器也不可以。所以,任何人實現(xiàn)這些技術(shù)都不能回 避可擴展性問題。這就是為什么Mahout將可擴展性作為最高優(yōu)先級,關(guān)注可擴展性問題,別人所沒有涉獵的一種方式,用于有效處理海量數(shù)據(jù)。
復雜的機器學習技術(shù),上規(guī)模的應用,直到目前為止,只是一些大的、先進的技術(shù)公司在考慮。但是,今天計算能力已經(jīng)比之前廉價,借助像Hadoop這 樣的開源框架更方便。Mahout嘗試通過使用hadoop提供優(yōu)質(zhì)、開源實現(xiàn),能夠在這個規(guī)模上解決問題,解決這類困惑,并且將其送到所有技術(shù)組織的手中。
MapReduce and Hadoop
Mahout的一些部分使用了Apache hadoop工程,hadoop是一個開源的、基于java的MapReduce(http://labs.google.com/papers/mapreduce.html )實現(xiàn)。MapReduce是一種分布式計算框架,在Google內(nèi)部使用。它是一種編程模式,開始聽起來感覺很奇怪,或者太簡單了以至于很強大。 MapReduce編程模式適用于輸入是key-value鍵值對集合的問題?!癿ap”函數(shù)將這些鍵值對轉(zhuǎn)換為中間鍵值對?!癛educe”函數(shù)通過某 種方式將同一個中間鍵的值合并到一起并產(chǎn)出結(jié)果。實際上,很多問題可以設計成MapReduce問題,或者他們的一個系列。并且這種模式非常易于并行化實 現(xiàn):所有的處理過程都是獨立的,所以可以劃分到不同機器上去。
Hadoop實現(xiàn)了MapReduce模式,這是一個不小的壯舉,甚至讓MapReduce像聽起來那么簡單。它管理輸入數(shù)據(jù)、中間鍵值對、輸 出數(shù)據(jù)的存儲。這些數(shù)據(jù)可能是海量的,需要在多臺計算機上運行,而不只是存儲在某一臺機器的本地。它管理不同機器之間的劃分、數(shù)據(jù)傳輸。它負責檢測、恢復 單個機器失敗的情況。理解了有很多工作在幕后進行能夠幫助你準備使用Hadoop的相對復雜性。不只是將它作為類庫添加到你的工程中,它包含很多模塊,每 一個模塊都有若干類庫和獨立的服務器進程,可能運行在幾臺機器上?;贖adoop的操作處理不簡單,但投入在可擴展的、分布式實現(xiàn)可以讓你在之后有很大 的收獲:因為你的數(shù)據(jù)可能成倍的增長,這種可擴展的性質(zhì)對你的應用來說是一種面向未來的方式。
你可以探索操作完整聚類的重點和細節(jié),調(diào)整整個框架。因為這個需要大量 計算能力的復雜框架變的越來越流行,所以一點都不奇怪,云計算已經(jīng)開始提供hadoop相關(guān)的支持。
本文版權(quán)歸黑馬程序員JavaEE學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
首發(fā):http://java.itheima.com/