Java 如何在apachesparkmllib';使用培训、测试和验证数据集

Java 如何在apachesparkmllib';使用培训、测试和验证数据集,java,apache-spark,apache-spark-mllib,collaborative-filtering,Java,Apache Spark,Apache Spark Mllib,Collaborative Filtering,我想实现ApacheSpark的ALS机器学习算法。我发现应该选择最好的模型来获得最好的结果。我已经按照论坛上的建议,将培训数据分为三组培训、验证和测试 我发现以下代码示例可以在这些集合上训练模型 val ranks = List(8, 12) val lambdas = List(1.0, 10.0) val numIters = List(10, 20) var bestModel: Option[MatrixFactorizationModel] = None var bestValida

我想实现ApacheSpark的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)
val等级=列表(8,12)
val lambdas=列表(1.0,10.0)
val numIters=列表(10,20)
var bestModel:选项[MatrixFactoryModel]=无
var bestValidationRmse=Double.MaxValue
var bestRank=0
var bestLambda=-1.0
变量bestNumIter=-1

对于(rankNo),人们永远不会使用测试数据对模型进行微调。如果您这样做,它将不再是您的测试数据。 我推荐Andrew Ng教授著名课程的这一部分,该部分讨论了模型培训过程:

根据您对验证数据集的错误值的观察,您可能希望添加/删除功能、获取更多数据或在模型中进行更改,甚至可能尝试完全不同的算法。如果交叉验证和测试rmse看起来合理,那么您就完成了模型,您可以使用它(一些预测,我想)这让你首先建造了它