我正在重构我的代码以利用
DataFrames,Estimators,and Pipelines.我最初在RDD [LabeledPoint]上使用
MLlib Multiclass LogisticRegressionWithLBFGS.我很高兴学习和使用新的API,但我不知道如何保存我的新模型并将其应用于新数据.
目前,LogisticRegression的ML实现仅支持二进制分类.我是,而不是像这样使用OneVsRest:
val lr = new LogisticRegression().setFitIntercept(true) val ovr = new OneVsRest() ovr.setClassifier(lr) val ovrModel = ovr.fit(training)
我现在想要保存我的OneVsRestModel,但这似乎不受API的支持.我试过了:
ovrModel.save("my-ovr") // Cannot resolve symbol save ovrModel.models.foreach(_.save("model-" + _.uid)) // Cannot resolve symbol save
有没有办法保存这个,所以我可以将它加载到新的应用程序中进行新的预测?
解决方法
Spark 2.0.0
OneVsRestModel实现了MLWritable,因此应该可以直接保存它.下面显示的方法对于单独保存单个模型仍然有用.
火花< 2.0.0 这里的问题是模型返回一个ClassificationModel [_,_]]数组而不是一个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") }
或者更通用:
import org.apache.spark.ml.util.MLWritable ovrModel.models.zipwithIndex.foreach { case (model: MLWritable,i: Int) => model.save(s"model-${model.uid}-$i") }
不幸的是,就目前而言(Spark 1.6)OneVsRestModel并没有实现MLWritable,因此无法单独保存.
注意:
OneVsRest中的所有模型似乎都使用相同的uid,因此我们需要一个显式索引.稍后识别模型也很有用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。