Spark ML - 保存 OneVsRestModel
Spark ML - Save OneVsRestModel
我正在重构我的代码以利用 RDD[LabeledPoint]
上的 DataFrames, Estimators, and Pipelines. I was originally using 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
所以应该可以直接保存。下面显示的方法对于单独保存单个模型仍然有用。
Spark < 2.0.0
这里的问题是 models
returns ClassificationModel[_, _]]
的 Array
而不是 LogisticRegressionModel
的 Array
(或 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
因此我们需要一个明确的索引。对以后识别型号也有帮助
我正在重构我的代码以利用 RDD[LabeledPoint]
上的 DataFrames, Estimators, and Pipelines. I was originally using 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
所以应该可以直接保存。下面显示的方法对于单独保存单个模型仍然有用。
Spark < 2.0.0
这里的问题是 models
returns ClassificationModel[_, _]]
的 Array
而不是 LogisticRegressionModel
的 Array
(或 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
因此我们需要一个明确的索引。对以后识别型号也有帮助