本文是《Spark大數據處理》系列的第四篇,其他三篇:Spark介紹、 Saprk SQL和 Spark Streaming 。
最近幾年,機器學習、預測分析和數據科學主題得到了廣泛的關注。Spark的機器學習庫(Spark MLlib),包括各種機器學習算法:協同過濾算法、聚類算法、分類算法和其他算法。
在前面的《Spark大數據處理》系列文章,介紹Apache Spark框架,介紹如何使用Spark SQL庫的SQL接口去訪問數據,使用Spark Streaming進行實時流式數據處理和分析。
在本篇文章,作者將討論機器學習概念以及如何使用Spark MLlib來進行預測分析。后面將會使用一個例子展示Spark MLlib在機器學習領域的強悍。
Spark機器學習API包含兩個package:spark.mllib 和spark.ml。
spark.mllib 包含基于彈性數據集(RDD)的原始Spark機器學習API。它提供的機器學習技術有:相關性、分類和回歸、協同過濾、聚類和數據降維。
spark.ml提供建立在 DataFrame 的機器學習API,DataFrame是Spark SQL的核心部分。這個包提供開發和管理機器學習管道的功能,可以用來進行特征提取、轉換、選擇器和機器學習算法,比如分類和回歸和聚類。
本篇文章聚焦在Spark MLlib上,并討論各個機器學習算法。下篇文章將講述Spark ML以及如何創建和管理數據管道。
機器學習和數據科學機器學習是從已經存在的數據進行學習來對將來進行數據預測,它是基于輸入數據集創建模型做數據驅動決策。
數據科學是從海里數據集(結構化和非結構化數據)中抽取知識,為商業團隊提供數據洞察以及影響商業決策和路線圖。數據科學家的地位比以前用傳統數值方法解決問題的人要重要。
以下是幾類機器學習模型:
監督學習模型非監督學習模型半監督學習模型增強學習模型下面簡單的了解下各機器學習模型,并進行比較:
監督學習模型:監督學習模型對已標記的訓練數據集訓練出結果,然后對未標記的數據集進行預測;監督學習又包含兩個子模型:回歸模型和分類模型。非監督學習模型:非監督學習模型是用來從原始數據(無訓練數據)中找到隱藏的模式或者關系,因而非監督學習模型是基于未標記數據集的;半監督學習模型:半監督學習模型用在監督和非監督機器學習中做預測分析,其既有標記數據又有未標記數據。典型的場景是混合少量標記數據和大量未標記數據。半監督學習一般使用分類和回歸的機器學習方法;增強學習模型: 增強學習模型 通過不同的行為來尋找目標回報函數最大化。
下面給各個機器學習模型舉個列子:
監督學習:異常監測;非監督學習:社交網絡,語言預測;半監督學習:圖像分類、語音識別;增強學習:人工智能(AI)。機器學習項目步驟開發機器學習項目時,數據預處理、清洗和分析的工作是非常重要的,與解決業務問題的實際的學習模型和算法一樣重要。典型的機器學習解決方案的一般步驟:
特征工程模型訓練模型評估圖1
原始數據如果不能清洗或者預處理,則會造成最終的結果不準確或者不可用,甚至丟失重要的細節。
訓練數據的質量對最終的預測結果非常重要,如果訓練數據不夠隨機,得出的結果模型不精確;如果數據量太小,機器學習出的模型也不準確。
使用案例:
業務使用案例分布于各個領域,包括個性化推薦引擎,數據預測分析,廣告,異常監測,圖像和視頻模型識別,以及其他各類人工智能。
接著來看兩個比較流行的機器學習應用:個性化推薦引擎和異常監測。
推薦引擎個性化推薦引擎使用商品屬性和用戶行為來進行預測。推薦引擎一般有兩種算法實現:基于內容過濾和協同過濾。
協調過濾的解決方案比其他算法要好,Spark MLlib實現了 ALS協同過濾算法 。Spark MLlib的協同過濾有兩種形式: 顯式反饋和隱試反饋 。顯式反饋是基于用戶購買的商品(比如,電影),顯式反饋雖好,但很多情況下會出現數據傾斜;隱試反饋是基于用戶的行為數據,比如,瀏覽、點擊、喜歡等行為。隱試反饋現在大規模應用在工業上進行數據預測分析,因為其很容易收集各類數據。
另外有基于模型的方法實現推薦引擎,這里暫且略過。
異常監測異常監測是機器學習中另外一個應用非常廣泛的技術,因為其可以快速和準確地解決金融行業的棘手問題。金融服務業需要在幾百毫秒內判斷出一筆在線交易是否非法。神經網絡技術被用來進行銷售點的異常監測。比如像PayPal等公司使用不同的機器學習算法(比如,線性回歸,神經網絡和深度學習)來進行風險管理。
Spark MLlib庫提供給了幾個實現的算法,比如,線性SVM、邏輯回歸、決策樹和貝葉斯算法。另外,一些集成模型,比如隨機森林和gradient-boosting樹。那么現在開始我們的使用Apache Spark框架進行機器學習之旅。
Spark MLlibSpark MLlib實現的機器學習庫使得機器學習模型可擴展和易使用,包括分類算法、回歸算法、聚類算法、協同過濾算法、降維算法,并提供了相應的API。除了這些算法外,Spark MLlib還提供了各種數據處理功能和數據分析工具為大家使用:
通過FP-growth算法進行頻繁項集挖掘和關聯分析;通過PrefixSpan算法進行序列模式挖掘;提供概括性統計和假設檢驗;提供特征轉換;機器學習模型評估和超參數調優。圖2 展示Spark生態Spark MLlib API支持Scala,Java和Python編程。
Spark MLlib應用實踐使用Spark MLlib實現推薦引擎。推薦引擎最佳實踐是基于已知用戶的商品行為而去預測用戶可能感興趣的未知商品。推薦引擎基于已知數據(也即,訓練數據)訓練出預測模型。然后利用訓練好的預測模型來預測。最佳電影推薦引擎的實現有下面幾步:
加載電影數據;加載你指定的評價數據;加載社區提供的評價數據;將評價數據join成單個RDD;使用ALS算法訓練模型;確認指定用戶(userId = 1)未評價的電影;預測未被用戶評價的電影的評價;獲取Top N的推薦(這里N= 5);在終端顯示推薦結果。如果你想對輸出的數據做進一步分析,你可以把預測的結果存儲到Cassandra或者MongoDB等數據庫。
使用到的技術這里采用Java開發Spark MLlib程序,并在stand-alone模型下執行。使用到的MLlib Java類:org.apache.spark.mllib.recommendation。
ALSMatrixFactorizationModelRating圖3 Spark機器學習的例子程序架構
程序執行:
開發好的程序進行打包,設置環境變量:JDK (JAVA_HOME), Maven (MAVEN_HOME)和Spark (SPARK_HOME)。
在Windows環境中:
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或者MAC系統中;
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運行Spark程序,命令如下:在Windows環境下:
%SPARK_HOME%inspark-submit --class "org.apache.spark.examples.mllib.JavaRecommendationExample" --master local[*] targetspark-mllib-sample-1.0.jar在Linux或者MAC環境下:
$SPARK_HOME/bin/spark-submit --class "org.apache.spark.examples.mllib.JavaRecommendationExample" --master local[*] target/spark-mllib-sample-1.0.jarSpark MLlib應用監控使用Spark的web控制臺可以進行監控程序運行狀態。這里只給出程序運行的有向無環圖(DAG):
圖4 DAG的可視化
結論Spark MLlib是Spark實現的機器學習庫中的一種,經常用來做業務數據的預測分析,比如個性化推薦引擎和異常監測系統。
作者信息:俠天,專注于大數據、機器學習和數學相關的內容,并有個人公眾號:bigdata_ny分享相關技術文章。
查看英文原文: Big Data Processing with Apache Spark - Part 4: Spark Machine Learning