【Spark機器學習實戰】 ML Pipeline 初探

人類經歷了從農業革命到工業革命,再到信息革命。信息革命,起源於互聯網的誕生,它將會經歷三個階段的躍遷。第一階段,人與人的連接(網絡的雛形),比如:Facebook;第二個階段,讓人們生活更便捷(移動互聯網、物聯網);第三個階段,讓人們生活更智能(機器人,無人汽車等)。機器學習作爲人工智能的一個分支,它更注重解決實際問題,所以,得到工業界的大力推廣,目前已經應用於多個領域,比如個性化推薦,金融反作弊等。

  • 數據科學家 vs 軟件工程師的代溝
  • 數據科學家 vs 軟件工程師的橋樑
  • Why ML Pipeline 是Spark機器學習的未來?
  • Spark機器學習庫

目前,spark提供兩套算法庫,分別是:mllib和ml。其中,Mllib是基於spark 原生RDD開發,從學習的角度來看,只要你有機器學習基礎,熟悉api就可以很容易上手。但是,構建機器學習系統是一個複雜的過程,從原始數據的清洗、解析,再到特徵的提取,模型的構建,模型的優化,是一個循環迭代的過程。尤其是,多模型的融合,基於mllib編寫的代碼不易維護,迭代速度減慢。所以,Spark開發者,受到目前優秀的python機器學習庫—scikit-learn 的啓發,從Spark 1.2版本以後,開始基於DataFrame,開發一套高級的api,將構建機器學習系統,做成一個流水線 Pipeline。一個Pipeline由多個PipelineStage構成,每個PipelineStage完成一個任務。

  • What ML pipeline ?
  • DataFrame

熟悉Spark SQL的都瞭解,sparkSQL的核心 DataFrame+Schema。那麼爲什麼ML會採用DataFrame作爲基礎的存儲結構,個人認爲,有兩個原因:1.數據處理的本質是,做數學集合操作,DataFrame是類似傳統數據庫的二維表格,操作方便。Spark SQL 已經可以支持多種數據類型的操作,這樣可以很好的和機器學習融合。對於機器學習前期的準備工作,數據預處理、清洗、數據分析很方便。2.構建pipeline機器學習工作流,多工程師、多數據科學家可以更好的協作。DataFrame可以保存清洗完畢的數據、提取的特徵數據、各個訓練模型。協作更方便,更容易迭代、優化模型,嘗試更多的模型算法。

  • Transformer

它的字面意思,就是轉換的意思,比如,可以把一個不含有預測標籤的“測試數據集”(dataframe)轉換爲包含預測標籤的數據集(dataframe)。一般,就是爲DataFrame添加一列或者多列,它是一個PipelineStage。

  • Estimator

它是一個抽象的概念,其實,就是一個機器學習算法在數據上fit或者train的過程。Estimator實現了一個fit函數,fit()函數接收 Dataframe 產生一個Model。比如:LR算法就是一個Estimator,它可以通過fit()函數產生一個LR模型。它是一個模型,因此也是一個Transformer。

  • Parameter

Transformer和Estimator中的參數,是公用一套api。這個就是由Parameter共同提供。

  • PipeLine

構建一個機器學習工作流,首先要設計各個pipelineStage的處理邏輯,也就是任務的切分。比如,數據的清洗、特徵的抽取等,然後,有序的組織各個pipelineStage,這樣就創建了一個pipeline。

  • 數據集說明

數據集來自stackoverflow公開的數據集,內容爲stackoverflow網站上帖子的數據,格式爲XML格式。

  • 標題-文章標題
  • 主體-文章文本
  • 標籤-文章的標籤列表
  • 實戰演示
  • step 1 import依賴庫
  • step 2 加載數據集&XML解析
  • step 3 創建Dataframe
  • step 4 準備訓練和測試數據集
  • step 5 訓練LR模型
  • step 6 測試模型
  • step 7 評估模型
  • 總結

通過本例可以瞭解ML Pipeline的工作流程,對於剛接觸spark 機器學習的讀者,建議先從MLlib學起,MLlib是基於原生的RDD,相對好理解,也容易上手。對於已經熟悉MLlib的讀者,構建複雜機器學習系統時,嘗試ML Pipeline ,因爲它集成了從數據清洗,到特徵抽取,再到模型訓練,模型保存的各個組件,結構和邏輯很清晰,也有利於算法模型工程師和ETL工程師的更好協作。

  • 參考
  • spark 1.6.2 官方文檔,spark 2016 summit 會議資料
  • https://fullstackml.com/2015/10/29/beginners-guide-apache-spark-machine-learning-scenario-with-a-large-input-dataset/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章