0

我想實現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) 

此代碼訓練模型的ranklambda每個組合,並與比較validation set RMSE(均方根誤差)。這些迭代給出了一個更好的模型,我們可以說這個模型由(rank,lambda)對代表。但在test集之後,它並沒有太大的作用。 它只是用`test'集計算rmse。

我的問題是如何使用test設置數據進一步調整。

回答

2

不,不會用測試數據來優化模型。如果你這樣做,它會停止成爲你的測試數據。 我建議教授安德魯·Ng的著名當然這節討論了模型訓練過程:https://www.coursera.org/learn/machine-learning/home/week/6

根據您與驗證數據集的誤差值的觀察,你可能想添加/刪除功能,獲得更多數據或對模型進行更改,或者甚至可以嘗試完全不同的算法。如果交叉驗證和測試rmse看起來合理,那麼您已經完成了該模型,並且您可以將其用於此目的(一些預測,我會假設),這使得您可以首先進行構建。

相關問題