【问题标题】:How to train Matrix Factorization Model in Apache Spark MLlib's ALS Using Training, Test and Validation datasets如何使用训练、测试和验证数据集在 Apache Spark MLlib 的 ALS 中训练矩阵分解模型
【发布时间】: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)

此代码为ranklambda 的每个组合训练模型,并将rmse(均方根误差)与validation set 进行比较。这些迭代提供了一个更好的模型,我们可以说它由(rank,lambda) 对表示。但在test 设置之后它并没有做太多。 它只是用 `test' 集计算 rmse。

我的问题是如何使用test 设置数据进一步调整它。

【问题讨论】:

    标签: java apache-spark apache-spark-mllib collaborative-filtering


    【解决方案1】:

    不,永远不会使用测试数据对模型进行微调。如果你这样做,它就不再是你的测试数据了。 我推荐 Andrew Ng 教授讨论模型训练过程的著名课程的这一部分:https://www.coursera.org/learn/machine-learning/home/week/6

    根据您对验证数据集的错误值的观察,您可能想要添加/删除特征、获取更多数据或对模型进行更改,或者甚至可能完全尝试不同的算法。如果交叉验证和测试 rmse 看起来合理,那么您已经完成了模型,您可以将其用于最初构建它的目的(我会假设是一些预测)。

    【讨论】:

      猜你喜欢
      • 2019-05-01
      • 1970-01-01
      • 2017-02-06
      • 2020-06-16
      • 2017-10-13
      • 2015-10-25
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      相关资源
      最近更新 更多