加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Spark ML – 保存OneVsRestModel

发布时间:2020-12-16 18:17:19 所属栏目:安全 来源:网络整理
导读:我正在重构我的代码以利用 DataFrames,Estimators,and Pipelines.我最初在RDD [LabeledPoint]上使用 MLlib Multiclass LogisticRegressionWithLBFGS.我很高兴学习和使用新的API,但我不知道如何保存我的新模型并将其应用于新数据. 目前,LogisticRegression的M
我正在重构我的代码以利用 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,因此我们需要一个显式索引.稍后识别模型也很有用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读