Spark大數(shù)據(jù)處理系列之Machine Learning

責(zé)任編輯:editor004

作者:俠天翻譯

2016-06-07 10:43:53

摘自:InfoQ

機(jī)器學(xué)習(xí)是從已經(jīng)存在的數(shù)據(jù)進(jìn)行學(xué)習(xí)來(lái)對(duì)將來(lái)進(jìn)行數(shù)據(jù)預(yù)測(cè),它是基于輸入數(shù)據(jù)集創(chuàng)建模型做數(shù)據(jù)驅(qū)動(dòng)決策

寫在之前:

本文是《Spark大數(shù)據(jù)處理》系列的第四篇,其他三篇:Spark介紹、 Saprk SQLSpark Streaming

最近幾年,機(jī)器學(xué)習(xí)、預(yù)測(cè)分析和數(shù)據(jù)科學(xué)主題得到了廣泛的關(guān)注。Spark的機(jī)器學(xué)習(xí)庫(kù)(Spark MLlib),包括各種機(jī)器學(xué)習(xí)算法:協(xié)同過(guò)濾算法、聚類算法、分類算法和其他算法。

在前面的《Spark大數(shù)據(jù)處理》系列文章,介紹Apache Spark框架,介紹如何使用Spark SQL庫(kù)的SQL接口去訪問(wèn)數(shù)據(jù),使用Spark Streaming進(jìn)行實(shí)時(shí)流式數(shù)據(jù)處理和分析。

在本篇文章,作者將討論機(jī)器學(xué)習(xí)概念以及如何使用Spark MLlib來(lái)進(jìn)行預(yù)測(cè)分析。后面將會(huì)使用一個(gè)例子展示Spark MLlib在機(jī)器學(xué)習(xí)領(lǐng)域的強(qiáng)悍。

Spark機(jī)器學(xué)習(xí)API包含兩個(gè)package:spark.mllib 和spark.ml。

spark.mllib 包含基于彈性數(shù)據(jù)集(RDD)的原始Spark機(jī)器學(xué)習(xí)API。它提供的機(jī)器學(xué)習(xí)技術(shù)有:相關(guān)性、分類和回歸、協(xié)同過(guò)濾、聚類和數(shù)據(jù)降維。

spark.ml提供建立在 DataFrame 的機(jī)器學(xué)習(xí)API,DataFrame是Spark SQL的核心部分。這個(gè)包提供開發(fā)和管理機(jī)器學(xué)習(xí)管道的功能,可以用來(lái)進(jìn)行特征提取、轉(zhuǎn)換、選擇器和機(jī)器學(xué)習(xí)算法,比如分類和回歸和聚類。

本篇文章聚焦在Spark MLlib上,并討論各個(gè)機(jī)器學(xué)習(xí)算法。下篇文章將講述Spark ML以及如何創(chuàng)建和管理數(shù)據(jù)管道。

機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)

機(jī)器學(xué)習(xí)是從已經(jīng)存在的數(shù)據(jù)進(jìn)行學(xué)習(xí)來(lái)對(duì)將來(lái)進(jìn)行數(shù)據(jù)預(yù)測(cè),它是基于輸入數(shù)據(jù)集創(chuàng)建模型做數(shù)據(jù)驅(qū)動(dòng)決策。

數(shù)據(jù)科學(xué)是從海里數(shù)據(jù)集(結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù))中抽取知識(shí),為商業(yè)團(tuán)隊(duì)提供數(shù)據(jù)洞察以及影響商業(yè)決策和路線圖。數(shù)據(jù)科學(xué)家的地位比以前用傳統(tǒng)數(shù)值方法解決問(wèn)題的人要重要。

以下是幾類機(jī)器學(xué)習(xí)模型:

監(jiān)督學(xué)習(xí)模型非監(jiān)督學(xué)習(xí)模型半監(jiān)督學(xué)習(xí)模型增強(qiáng)學(xué)習(xí)模型

下面簡(jiǎn)單的了解下各機(jī)器學(xué)習(xí)模型,并進(jìn)行比較:

監(jiān)督學(xué)習(xí)模型:監(jiān)督學(xué)習(xí)模型對(duì)已標(biāo)記的訓(xùn)練數(shù)據(jù)集訓(xùn)練出結(jié)果,然后對(duì)未標(biāo)記的數(shù)據(jù)集進(jìn)行預(yù)測(cè);
監(jiān)督學(xué)習(xí)又包含兩個(gè)子模型:回歸模型和分類模型。非監(jiān)督學(xué)習(xí)模型:非監(jiān)督學(xué)習(xí)模型是用來(lái)從原始數(shù)據(jù)(無(wú)訓(xùn)練數(shù)據(jù))中找到隱藏的模式或者關(guān)系,因而非監(jiān)督學(xué)習(xí)模型是基于未標(biāo)記數(shù)據(jù)集的;半監(jiān)督學(xué)習(xí)模型:半監(jiān)督學(xué)習(xí)模型用在監(jiān)督和非監(jiān)督機(jī)器學(xué)習(xí)中做預(yù)測(cè)分析,其既有標(biāo)記數(shù)據(jù)又有未標(biāo)記數(shù)據(jù)。典型的場(chǎng)景是混合少量標(biāo)記數(shù)據(jù)和大量未標(biāo)記數(shù)據(jù)。半監(jiān)督學(xué)習(xí)一般使用分類和回歸的機(jī)器學(xué)習(xí)方法;增強(qiáng)學(xué)習(xí)模型: 增強(qiáng)學(xué)習(xí)模型 通過(guò)不同的行為來(lái)尋找目標(biāo)回報(bào)函數(shù)最大化。

下面給各個(gè)機(jī)器學(xué)習(xí)模型舉個(gè)列子:

監(jiān)督學(xué)習(xí):異常監(jiān)測(cè);非監(jiān)督學(xué)習(xí):社交網(wǎng)絡(luò),語(yǔ)言預(yù)測(cè);半監(jiān)督學(xué)習(xí):圖像分類、語(yǔ)音識(shí)別;增強(qiáng)學(xué)習(xí):人工智能(AI)。機(jī)器學(xué)習(xí)項(xiàng)目步驟

開發(fā)機(jī)器學(xué)習(xí)項(xiàng)目時(shí),數(shù)據(jù)預(yù)處理、清洗和分析的工作是非常重要的,與解決業(yè)務(wù)問(wèn)題的實(shí)際的學(xué)習(xí)模型和算法一樣重要。典型的機(jī)器學(xué)習(xí)解決方案的一般步驟:

特征工程模型訓(xùn)練模型評(píng)估

Spark

  圖1

原始數(shù)據(jù)如果不能清洗或者預(yù)處理,則會(huì)造成最終的結(jié)果不準(zhǔn)確或者不可用,甚至丟失重要的細(xì)節(jié)。

訓(xùn)練數(shù)據(jù)的質(zhì)量對(duì)最終的預(yù)測(cè)結(jié)果非常重要,如果訓(xùn)練數(shù)據(jù)不夠隨機(jī),得出的結(jié)果模型不精確;如果數(shù)據(jù)量太小,機(jī)器學(xué)習(xí)出的模型也不準(zhǔn)確。

使用案例:

業(yè)務(wù)使用案例分布于各個(gè)領(lǐng)域,包括個(gè)性化推薦引擎,數(shù)據(jù)預(yù)測(cè)分析,廣告,異常監(jiān)測(cè),圖像和視頻模型識(shí)別,以及其他各類人工智能。

接著來(lái)看兩個(gè)比較流行的機(jī)器學(xué)習(xí)應(yīng)用:個(gè)性化推薦引擎和異常監(jiān)測(cè)。

推薦引擎

個(gè)性化推薦引擎使用商品屬性和用戶行為來(lái)進(jìn)行預(yù)測(cè)。推薦引擎一般有兩種算法實(shí)現(xiàn):基于內(nèi)容過(guò)濾和協(xié)同過(guò)濾。

協(xié)調(diào)過(guò)濾的解決方案比其他算法要好,Spark MLlib實(shí)現(xiàn)了 ALS協(xié)同過(guò)濾算法 。Spark MLlib的協(xié)同過(guò)濾有兩種形式: 顯式反饋和隱試反饋 。顯式反饋是基于用戶購(gòu)買的商品(比如,電影),顯式反饋雖好,但很多情況下會(huì)出現(xiàn)數(shù)據(jù)傾斜;隱試反饋是基于用戶的行為數(shù)據(jù),比如,瀏覽、點(diǎn)擊、喜歡等行為。隱試反饋現(xiàn)在大規(guī)模應(yīng)用在工業(yè)上進(jìn)行數(shù)據(jù)預(yù)測(cè)分析,因?yàn)槠浜苋菀资占黝悢?shù)據(jù)。

另外有基于模型的方法實(shí)現(xiàn)推薦引擎,這里暫且略過(guò)。

異常監(jiān)測(cè)

異常監(jiān)測(cè)是機(jī)器學(xué)習(xí)中另外一個(gè)應(yīng)用非常廣泛的技術(shù),因?yàn)槠淇梢钥焖俸蜏?zhǔn)確地解決金融行業(yè)的棘手問(wèn)題。金融服務(wù)業(yè)需要在幾百毫秒內(nèi)判斷出一筆在線交易是否非法。神經(jīng)網(wǎng)絡(luò)技術(shù)被用來(lái)進(jìn)行銷售點(diǎn)的異常監(jiān)測(cè)。比如像PayPal等公司使用不同的機(jī)器學(xué)習(xí)算法(比如,線性回歸,神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí))來(lái)進(jìn)行風(fēng)險(xiǎn)管理。

Spark MLlib庫(kù)提供給了幾個(gè)實(shí)現(xiàn)的算法,比如,線性SVM、邏輯回歸、決策樹和貝葉斯算法。另外,一些集成模型,比如隨機(jī)森林和gradient-boosting樹。那么現(xiàn)在開始我們的使用Apache Spark框架進(jìn)行機(jī)器學(xué)習(xí)之旅。

Spark MLlib

Spark MLlib實(shí)現(xiàn)的機(jī)器學(xué)習(xí)庫(kù)使得機(jī)器學(xué)習(xí)模型可擴(kuò)展和易使用,包括分類算法、回歸算法、聚類算法、協(xié)同過(guò)濾算法、降維算法,并提供了相應(yīng)的API。除了這些算法外,Spark MLlib還提供了各種數(shù)據(jù)處理功能和數(shù)據(jù)分析工具為大家使用:

通過(guò)FP-growth算法進(jìn)行頻繁項(xiàng)集挖掘和關(guān)聯(lián)分析;通過(guò)PrefixSpan算法進(jìn)行序列模式挖掘;提供概括性統(tǒng)計(jì)和假設(shè)檢驗(yàn);提供特征轉(zhuǎn)換;機(jī)器學(xué)習(xí)模型評(píng)估和超參數(shù)調(diào)優(yōu)。

  圖2 展示Spark生態(tài)Spark MLlib API支持Scala,Java和Python編程。

Spark MLlib應(yīng)用實(shí)踐

使用Spark MLlib實(shí)現(xiàn)推薦引擎。推薦引擎最佳實(shí)踐是基于已知用戶的商品行為而去預(yù)測(cè)用戶可能感興趣的未知商品。推薦引擎基于已知數(shù)據(jù)(也即,訓(xùn)練數(shù)據(jù))訓(xùn)練出預(yù)測(cè)模型。然后利用訓(xùn)練好的預(yù)測(cè)模型來(lái)預(yù)測(cè)。最佳電影推薦引擎的實(shí)現(xiàn)有下面幾步:

加載電影數(shù)據(jù);加載你指定的評(píng)價(jià)數(shù)據(jù);加載社區(qū)提供的評(píng)價(jià)數(shù)據(jù);將評(píng)價(jià)數(shù)據(jù)join成單個(gè)RDD;使用ALS算法訓(xùn)練模型;確認(rèn)指定用戶(userId = 1)未評(píng)價(jià)的電影;預(yù)測(cè)未被用戶評(píng)價(jià)的電影的評(píng)價(jià);獲取Top N的推薦(這里N= 5);在終端顯示推薦結(jié)果。

如果你想對(duì)輸出的數(shù)據(jù)做進(jìn)一步分析,你可以把預(yù)測(cè)的結(jié)果存儲(chǔ)到Cassandra或者M(jìn)ongoDB等數(shù)據(jù)庫(kù)。

使用到的技術(shù)

這里采用Java開發(fā)Spark MLlib程序,并在stand-alone模型下執(zhí)行。使用到的MLlib Java類:org.apache.spark.mllib.recommendation。

ALSMatrixFactorizationModelRating

  圖3 Spark機(jī)器學(xué)習(xí)的例子程序架構(gòu)

程序執(zhí)行:

開發(fā)好的程序進(jìn)行打包,設(shè)置環(huán)境變量:JDK (JAVA_HOME), Maven (MAVEN_HOME)和Spark (SPARK_HOME)。

在Windows環(huán)境中:

set JAVA_HOME=[JDK_INSTALL_DIRECTORY]set PATH=%PATH%;%JAVA_HOME%inset MAVEN_HOME=[MAVEN_INSTALL_DIRECTORY]set PATH=%PATH%;%MAVEN_HOME%inset SPARK_HOME=[SPARK_INSTALL_DIRECTORY]set PATH=%PATH%;%SPARK_HOME%incd c:devprojectsspark-mllib-sample-appmvn clean installmvn eclipse:clean eclipse:eclipse

在Linux或者M(jìn)AC系統(tǒng)中;

export JAVA_HOME=[JDK_INSTALL_DIRECTORY]export PATH=$PATH:$JAVA_HOME/binexport MAVEN_HOME=[MAVEN_INSTALL_DIRECTORY]export PATH=$PATH:$MAVEN_HOME/binexport SPARK_HOME=[SPARK_INSTALL_DIRECTORY]export PATH=$PATH:$SPARK_HOME/bincd /Users/USER_NAME/spark-mllib-sample-appmvn clean installmvn eclipse:clean eclipse:eclipse

運(yùn)行Spark程序,命令如下:在Windows環(huán)境下:

%SPARK_HOME%inspark-submit --class "org.apache.spark.examples.mllib.JavaRecommendationExample" --master local[*] targetspark-mllib-sample-1.0.jar

在Linux或者M(jìn)AC環(huán)境下:

$SPARK_HOME/bin/spark-submit --class "org.apache.spark.examples.mllib.JavaRecommendationExample" --master local[*] target/spark-mllib-sample-1.0.jarSpark MLlib應(yīng)用監(jiān)控

使用Spark的web控制臺(tái)可以進(jìn)行監(jiān)控程序運(yùn)行狀態(tài)。這里只給出程序運(yùn)行的有向無(wú)環(huán)圖(DAG):

  圖4 DAG的可視化

結(jié)論

Spark MLlib是Spark實(shí)現(xiàn)的機(jī)器學(xué)習(xí)庫(kù)中的一種,經(jīng)常用來(lái)做業(yè)務(wù)數(shù)據(jù)的預(yù)測(cè)分析,比如個(gè)性化推薦引擎和異常監(jiān)測(cè)系統(tǒng)。

作者信息:俠天,專注于大數(shù)據(jù)、機(jī)器學(xué)習(xí)和數(shù)學(xué)相關(guān)的內(nèi)容,并有個(gè)人公眾號(hào):bigdata_ny分享相關(guān)技術(shù)文章。

查看英文原文: Big Data Processing with Apache Spark - Part 4: Spark Machine Learning

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)