Bri*_*ian 5 scala apache-spark apache-spark-ml apache-spark-mllib
我正在重构我的代码以利用DataFrames,Estimators和Pipelines.我本来用MLlib多类LogisticRegressionWithLBFGS上RDD[LabeledPoint].我很高兴学习和使用新的API,但我不知道如何保存我的新模型并将其应用于新数据.
目前,ML实现LogisticRegression仅支持二进制分类.我是,而不是像这样使用OneVsRest:
val lr = new LogisticRegression().setFitIntercept(true)
val ovr = new OneVsRest()
ovr.setClassifier(lr)
val ovrModel = ovr.fit(training)
Run Code Online (Sandbox Code Playgroud)
我现在想保存我的OneVsRestModel,但这似乎不受API的支持.我试过了:
ovrModel.save("my-ovr") // Cannot resolve symbol save
ovrModel.models.foreach(_.save("model-" + _.uid)) // Cannot resolve symbol save
Run Code Online (Sandbox Code Playgroud)
有没有办法保存这个,所以我可以将它加载到新的应用程序中进行新的预测?
Spark 2.0.0
OneVsRestModel实现MLWritable所以应该可以直接保存它.下面显示的方法对于单独保存单个模型仍然有用.
Spark <2.0.0
这里的问题是,models返回Array的ClassificationModel[_, _]]不是Array的LogisticRegressionModel(或MLWritable).为了使它工作,你必须具体说明类型:
import org.apache.spark.ml.classification.LogisticRegressionModel
ovrModel.models.zipWithIndex.foreach {
case (model: LogisticRegressionModel, i: Int) =>
model.save(s"model-${model.uid}-$i")
}
Run Code Online (Sandbox Code Playgroud)
或者更通用:
import org.apache.spark.ml.util.MLWritable
ovrModel.models.zipWithIndex.foreach {
case (model: MLWritable, i: Int) =>
model.save(s"model-${model.uid}-$i")
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,现在(Spark 1.6)OneVsRestModel没有实现,MLWritable因此无法单独保存.
注意:
OneVsRest似乎使用相同的所有模型uid因此我们需要一个显式索引.稍后识别模型也很有用.
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |