我想實現Apache Spark的ALS機器學習算法。我發現應該選擇最好的模型來獲得最佳結果。根據論壇上的建議,我已將培訓數據分爲三組Training, Validation and Test
。如何在Apache Spark中訓練Matrix分解模型MLlib的ALS使用訓練,測試和驗證數據集
我發現了以下代碼示例來訓練這些集合上的模型。
val ranks = List(8, 12)
val lambdas = List(1.0, 10.0)
val numIters = List(10, 20)
var bestModel: Option[MatrixFactorizationModel] = None
var bestValidationRmse = Double.MaxValue
var bestRank = 0
var bestLambda = -1.0
var bestNumIter = -1
for (rank <- ranks; lambda <- lambdas; numIter <- numIters) {
val model = ALS.train(training, rank, numIter, lambda)
val validationRmse = computeRmse(model, validation, numValidation)
if (validationRmse < bestValidationRmse) {
bestModel = Some(model)
bestValidationRmse = validationRmse
bestRank = rank
bestLambda = lambda
bestNumIter = numIter
}
}
val testRmse = computeRmse(bestModel.get, test, numTest)
此代碼訓練模型的rank
和lambda
每個組合,並與比較validation set
RMSE(均方根誤差)。這些迭代給出了一個更好的模型,我們可以說這個模型由(rank,lambda)
對代表。但在test
集之後,它並沒有太大的作用。 它只是用`test'集計算rmse。
我的問題是如何使用test
設置數據進一步調整。