MLLIb:保存并加载模型

时间:2014-12-15 22:29:56

标签: scala apache-spark apache-spark-mllib

我使用LinearRegressionWithSGD然后保存模型权重和拦截。

包含权重的文件具有以下格式:

1.20455
0.1356
0.000456

拦截为0因为我使用的是火车没有设置拦截所以暂时可以忽略它。我现在想要初始化一个新的模型对象并使用上面文件中的这些保存的权重。我们正在使用CDH 5.1

这些方面的东西:

// Here is the code the load data and train the model on it.
val weights = sc.textFile("linear-weights");
val model = new LinearRegressionWithSGD(weights);

然后使用如下:

// Here is where I want to use the trained model to predict on new data.
val valuesAndPreds = testData.map { point =>
  // Predicting on new data.
  val prediction = model.predict(point.features)
  (point.label, prediction)
}

有关如何做到这一点的任何指示?

1 个答案:

答案 0 :(得分:1)

您似乎正在复制LinearRegressionWithSGD的训练部分 - 它将LibSVM文件作为输入。

  • 您确定要提供自己的权重 - 而不是让图书馆在培训阶段完成工作吗?
  • 如果是,那么您可以创建自己的LinearRegressionWithSGD并覆盖createModel

如果你已经计算出你想要的重量/按照你自己的方式进行训练,这将是你的步骤:

 // Stick in your weights below ..
var model = algorithm.createModel(weights, 0.0)

// Now you can run the last steps of the 'normal' process
val prediction = model.predict(test.map(_.features))
val predictionAndLabel = prediction.zip(test.map(_.label))
这里参考BTW是更多的标准'方法包括培训步骤:

val data = MLUtils.loadLibSVMFile(sc, inputFile).cache()

val splits = examples.randomSplit(Array(0.8, 0.2))
val training = splits(0).cache()
val test = splits(1).cache()

val updater = params.regType match {
  case NONE => new SimpleUpdater()
  case L1 => new L1Updater()
  case L2 => new SquaredL2Updater()
}

val algorithm = new LinearRegressionWithSGD()

val algorithm = new LinearRegressionWithSGD()
algorithm.optimizer
  .setNumIterations(params.numIterations)
  .setStepSize(params.stepSize)
  .setUpdater(updater)
  .setRegParam(params.regParam)

val model = algorithm.run(training)

val prediction = model.predict(test.map(_.features))
val predictionAndLabel = prediction.zip(test.map(_.label))