我想实现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
设置数据进一步调整。