天天看點

[Spark2.0]ML 調優:模型選擇和超參數調優模型選擇(又名超參數調優)交叉驗證訓練-驗證切分

        本節講述如何使用MLlib提供的工具來對ML算法和Pipline進行調優。内建的交叉驗證和其他工具允許使用者在算法和Pipline中優化超參數。

模型選擇(又名超參數調優)

       在ML中一個重要的任務就是模型選擇,或者使用給定的資料為給定的任務尋找最适合的模型或參數。這也叫做調優。調優可以是對單個的Estimator,比如LogisticRegression,或者是包含多個算法、向量化和其他步驟的整個Pipline。使用者可以一次性對整個Pipline進行調優,而不必對Pipline中的每一個元素進行單獨的調優。

       MLlib支援使用像CrossValidator和TrainValidationSplit這樣的工具進行模型選擇。這些工具需要以下的元件:

  • Estimator:使用者調優的算法或Pipline
  • ParamMap集合:提供參數選擇,有時也叫作使用者查找的“參數網格”
  • Evaluator:衡量模型在測試資料上的拟合程度

在上層,這些模型選擇工具的工作方式如下:

  • 将輸入資料切分成訓練資料集和測試資料集
  • 對于每一個(訓練資料,測試資料)對,通過ParamMap集合進行疊代:
    • 對于每個ParamMap,使用它提供的參數對Estimator進行拟合,給出拟合模型,然後使用Evaluator來評估模型的性能
  • 選擇表現最好的參數集合生成的模型

       針對回歸問題,Evaluator可以是一個RegressionEvaluator;針對二進制資料,可以是BinaryClassificationEvaluator,或者是對于對分類問題的MulticlassClassificationEvaluator。用于選擇最佳ParamMap的預設度量方式可以通過評估器的setMetricName方法進行覆寫。

       為了友善構造參數網格,使用者可以使用通用的ParamGridBuilder。

交叉驗證

       CrossValidator 從将資料集切分成K折資料集合,并被分别用于訓練和測試,例如,K=3折時,CrossValidator會生成3個(訓練資料,測試資料)對,每一個資料對的訓練資料占2/3,測試資料占1/3。為了評估一個ParamMap,CrossValidator 會計算這三個不同的(訓練,測試)資料集對在Estimator拟合出的模型上的平均評估名額。

       在找出最好的ParamMap後,CrossValidator 會使用這個ParamMap和整個的資料集來重新拟合Estimator。

示例:使用交叉驗證進行模型選擇

       下面示例示範了使用CrossValidator從整個網格的參數中選擇合适的參數。

       注意在整個參數網格中進行交叉驗證是比較耗時的。例如,在下面的例子中,參數網格有3個hashingTF.numFeatures值和2個lr.regParam值,CrossValidator使用2折切分資料。最終将有(3 * 2) * 2 = 12個不同的模型将被訓練。在真實場景中,很可能使用更多的參數和進行更多折切分(k=3和k=10都很常見)。換句話說,使用CrossValidator的代價可能會異常的高。然而,對比啟發式的手動調優,這是選擇參數的行之有效的方法。

[Spark2.0]ML 調優:模型選擇和超參數調優模型選擇(又名超參數調優)交叉驗證訓練-驗證切分
[Spark2.0]ML 調優:模型選擇和超參數調優模型選擇(又名超參數調優)交叉驗證訓練-驗證切分

      可以在Spark倉庫的"examples/src/main/scala/org/apache/spark/examples/ml/ModelSelectionViaCrossValidationExample.scala"找到完整的代碼。

訓練-驗證切分

       作為CrossValidator 的附加,Spark就同樣為超參數調優提供了TrainValidationSplit。相對于CrossValidator的K次評估,TrainValidationSplit隻對每個參數組合評估一次。是以它的評估代價沒有這麼高,但是當訓練資料集不夠大的時候其結果相對不夠可信。

       不同于CrossValidator,TrainValidationSplit建立單一的(訓練,測試)資料集對。它使用trainRatio參數将資料集切分成兩部分。例如,當設定trainRatio=0.75時,TrainValidationSplit将會将資料切分75%作為資料集,25%作為驗證集,來生成訓練、測試集對。

       與CrossValidator相似,TrainValidationSplit最終使用最好的ParamMap和完整的資料集來拟合Estimator。

示例:通過訓練/驗證切分選擇模型

[Spark2.0]ML 調優:模型選擇和超參數調優模型選擇(又名超參數調優)交叉驗證訓練-驗證切分

可以在Spark倉庫的"examples/src/main/scala/org/apache/spark/examples/ml/ModelSelectionViaTrainValidationSplitExample.scala"找到完整的代碼。

原文位址:http://spark.apache.org/docs/2.0.0/ml-tuning.html

繼續閱讀