【发布时间】:2015-08-28 01:33:19
【问题描述】:
我想实现 Apache Spark 的 ALS 机器学习算法。我发现应该选择最佳模型以获得最佳结果。按照论坛上的建议,我已将训练数据分成三组Training, Validation and Test。
我找到了以下代码示例来在这些集合上训练模型。
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 的每个组合训练模型,并将rmse(均方根误差)与validation set 进行比较。这些迭代提供了一个更好的模型,我们可以说它由(rank,lambda) 对表示。但在test 设置之后它并没有做太多。
它只是用 `test' 集计算 rmse。
我的问题是如何使用test 设置数据进一步调整它。
【问题讨论】:
标签: java apache-spark apache-spark-mllib collaborative-filtering