Spark機器學習——模型選擇與參數調優之交叉驗證


spark 模型選擇與超參調優

機器學習可以簡單的歸納為 通過數據訓練y = f(x) 的過程,因此定義完訓練模型之后,就需要考慮如何選擇最終我們認為最優的模型。

如何選擇最優的模型,就是本篇的主要內容:

  • 模型驗證的方法
  • 超參數的選擇
  • 評估函數的選擇

模型驗證的方法

在《統計學習方法》這本書中,曾經講過模型驗證的方法有三種,分別是簡單的交叉驗證S折交叉驗證留一交叉驗證

簡單的交叉驗證

即把全部數據按照比例分割成兩部分,分別是訓練集和測試集。在訓練集訓練模型,在測試集測試效果,最終選擇一個代價比較小的結果。一般是0.75。

S折交叉驗證

設置S為一個數,一般是3或者10居多。如果是3,那么前2份作為訓練集,最后一份作為測試集。

留一交叉驗證

如果S的個數正好是樣本的容量,就是留一交叉驗證。

PS:
訓練集是用於訓練模型,測試集適用於判斷此次訓練效果。

在Spark MLLib中,為我們提供了兩種驗證方法,分別是

  • Cross-Validation : S折交叉驗證
  • Train-ValidationSplit:簡單交叉驗證

超參數的選擇

在Spark MLLib中,超參數可以通過上面的驗證方法,作為參數傳進去:

// 定義超參數集合
val paramGrid = new ParamGridBuilder()
  .addGrid(hashingTF.numFeatures, Array(10, 100, 1000))
  .addGrid(lr.regParam, Array(0.1, 0.01))
  .build()
// 定義驗證器
val cv = new CrossValidator()
  .setEstimator(pipeline)
  .setEvaluator(new BinaryClassificationEvaluator)
  .setEstimatorParamMaps(paramGrid)
  .setNumFolds(2)  // Use 3+ in practice

其中hashingTF給設置了3個參數、lr給了2個參數,如果正常我們想要驗證這6個參數的組合,應該需要驗證6次。但是在Spark中,基於Validator可以一次性驗證出來,並自動選擇最后代價最小的那個。

PS
上面S折交叉驗證中S的參數為2,因此內部只有一個訓練集;如果是3,那么最終運行的訓練次數將會是 (3*2)*2 = 12次。

評估函數的確定

Spark提供了三種評估函數:

  • RegressionEvaluator用於回歸預測的問題
  • BinaryClassificationEvaluator用於二分類問題
  • MulticlassClassificationEvaluator用於多分類問題

詳細的代碼,可以參考:
http://spark.apache.org/docs/latest/ml-tuning.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM