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看起来合理,那么您已经完成了该模型,并且您可以将其用于此目的(一些预测,我会假设),这使得您可以首先进行构建。

相关问题