跳轉到主要內容
工程的博客

Apache火花2.0預覽版:機器學習模型持久性

2016年5月31日 工程的博客

分享這篇文章

介紹

考慮這些機器學習(ML)的用例:

  • 數據科學家產生毫升模型和消息交給一個工程團隊部署在生產環境中。
  • 在Python中集成了一個工作流模型訓練數據工程師與一個在Java服務工作流模型。
  • 數據科學家創造就業機會訓練許多毫升模型,保存和評估。

所有這些用例都容易與模型持久性、保存和加載模型的能力。即將發布的Apache 2.0火花火花的機器學習庫MLlib將包括幾乎完全支持毫升持久性DataFrame-based API。這篇文章給出了一個早期的概述,代碼示例,一些細節MLlib的持久性API。

毫升持久性的關鍵特性包括:

  • 支持所有語言api火花:Scala、Java、Python和R
  • 支持幾乎所有的ML算法DataFrame-based API
  • 支持單一模型和完整的管道,都不適合(一個“配方”)和安裝(結果)
  • 分布式存儲使用一個可交換的格式

感謝所有的社區貢獻者幫助MLlib這個大的飛躍!看到jiraScala / Java,Python,R完整的列表的貢獻者。

學習API

在Apache 2.0火花,DataFrame-based API為MLlib正在前排毫升火花。(見這之前的博文介紹這個API和“管道”的概念介紹)。這對於MLlib DataFrame-based API提供了保存和加載功能模型,模仿熟悉的火花數據源API。

我們將演示保存和加載模型在幾種語言使用流行的手寫數字識別MNIST數據集(勒存et al ., 1998;可以從LibSVM數據頁麵)。這個數據集包含手寫數字0 - 9,加上地麵實況標簽。下麵是一些例子:

截圖的手寫數字。

我們的目標將是新的手寫數字圖像和識別數字。看到這個筆記本為完整的示例代碼來加載這些數據,適合的模型,並保存和加載它們。

保存和加載模型

我們首先展示如何保存和加載單模型語言之間分享。我們將配合隨機森林分類器使用Python,保存它,然後加載相同的模型使用Scala。

培訓= sqlContext.read……#數據:功能,標簽
射頻= RandomForestClassifier (numTrees = 20)
模型= rf.fit(培訓)

我們可以簡單地調用保存方法來拯救這個模型,負載方法來加載它回來:

model.save (“myModelPath”)
sameModel = RandomForestClassificationModel.load (“myModelPath”)

我們還可以加載相同的模型(我們保存在Python)成一個Scala或Java應用程序:

/ /加載模型在Scala中
val sameModel = RandomForestClassificationModel.load (“myModelPath”)

這適用於小型本地模型如k - means模型(集群)和大型分布式模型如ALS模型(推薦)。加載模型具有相同的參數設置和數據,因此它將返回相同的預測即使加載到一個完全不同的火花部署。

保存和加載完整的管道

到目前為止,我們隻看到了保存和加載一個毫升模型。毫升工作流包含許多階段,在實踐中,從特征提取和轉換模型擬合和調優。MLlib提供管道來幫助用戶構建這些工作流。
MLlib允許用戶保存和加載整個管道。讓我們來看看這是如何實現在一個管道與這些步驟:

  • 特征提取:Binarizer將圖像轉換成黑白
  • 模型擬合:隨機森林分類器取圖像和預測數字0 - 9
  • 調優:交叉驗證來優化森林中的樹的深度

這裏是我們的筆記本建立這個管道的一個片段:

/ /構建管道:Binarizer +隨機森林
val管道=新管道()。setStages(數組(binarizer rf))

/ /包裝管道CrossValidator模型調優。
val簡曆= new CrossValidator () .setEstimator(管道)…

符合這一管道之前,我們將展示我們可以拯救整個工作流(擬合前)。這個工作流可以加載後運行在另一個數據集,在另一個引發集群等。

cv.save (“myCVPath”)
val sameCV = CrossValidator.load (“myCVPath”)

最後,我們可以適應管道,再將其保存和加載它。這節省了特征提取步驟,通過交叉驗證隨機森林模型調整,統計數據模型調優。

val cvModel = cv.fit(培訓)
cvModel.save (“myCVModelPath”)
val sameCVModel = CrossValidatorModel.load (“myCVModelPath”)

學習的細節

Python的調優

丟失物品的火花Python 2.0是調優。Python還不支持保存和加載CrossValidator TrainValidationSplit,用於優化模型hyperparameters;這個問題是針對火花2.1 (火星- 13786)。然而,它仍然有可能拯救CrossValidator和TrainValidationSplit Python的結果。例如,讓我們使用交叉驗證來調整一個隨機森林然後保存最好的模型中發現調優。

定義工作流

射頻= RandomForestClassifier ()
簡曆= CrossValidator(估計量=射頻,…)

符合模型,交叉驗證

cvModel = cv.fit (trainingData)

提取的結果,即。,the best Random Forest model

bestModel = cvModel.bestModel

保存RandomForest模型

bestModel.save (“rfModelPath”)

看到筆記本完整的代碼。

可交換的存儲格式

在內部,我們保存模型元數據和參數作為JSON數據作為鑲木地板。這些存儲格式是可交換的,可以使用其他圖書館閱讀。拚花讓我們存儲小模型(如樸素貝葉斯分類)和大型分布式模型(肌萎縮性側索硬化症等推薦)。數據集支持的存儲路徑可以是任何URI / DataFrame保存和加載,包括路徑S3,本地存儲等等。

語言的跨平台兼容性

模型可以很容易地保存和加載在Scala中,Java、Python。R有兩個局限性。首先,並不是所有MLlib模型支持從R,所以不是所有的其他語言模型訓練可以加載到R .其次,當前特定於R, R模型格式存儲額外的數據使其有點出租汽車司機使用其他語言加載模型訓練和保存在R(見附帶的筆記本黑客。更好的跨語言支持R在不久的將來將被添加。

結論

隨著即將到來的2.0版本,DataFrame-based MLlib API將提供幾乎完全覆蓋持久化模型和管道。堅持是至關重要的,團隊之間共享模型,創建多語言毫升工作流和移動模型來生產。這個特性是準備的最後一塊DataFrame-based MLlib API成為機器學習的主要API在Apache火花。

接下來是什麼?

高優先級的項目包括完整的持久性覆蓋,包括Python模型優化算法,以及改進的R和其他語言api之間的兼容性。

開始本教程的筆記本在Scala中,Python。您也可以更新當前MLlib工作流使用保存和加載。
實驗這個API使用Apache火花磚社區中的分支- 2.0預覽版測試版。

閱讀更多

免費試著磚
看到所有工程的博客的帖子
Baidu
map