如何加载逻辑回归模型?

时间:2017-12-07 08:53:32

标签: apache-spark apache-spark-ml

我想在Java中使用Apache Spark训练逻辑回归模型。作为第一步,我想训练模型一次并保存模型参数(截距和系数)。随后使用保存的模型参数在稍后的时间点进行评分。我可以使用以下代码

将模型保存在镶木地板文件中
LogisticRegressionModel trainedLRModel = logReg.fit(data);
trainedLRModel.write().overwrite().save("mypath");

当我加载模型进行评分时,我收到以下错误。

LogisticRegression lr = new LogisticRegression();
lr.load("//saved_model_path");

Exception in thread "main" java.lang.NoSuchMethodException: org.apache.spark.ml.classification.LogisticRegressionModel.<init>(java.lang.String)
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.getConstructor(Class.java:1825)
    at org.apache.spark.ml.util.DefaultParamsReader.load(ReadWrite.scala:325)
    at org.apache.spark.ml.util.MLReadable$class.load(ReadWrite.scala:215)
    at org.apache.spark.ml.classification.LogisticRegression$.load(LogisticRegression.scala:672)
    at org.apache.spark.ml.classification.LogisticRegression.load(LogisticRegression.scala)

有没有办法训练和保存模型,然后再评估(得分)?我在Java中使用Spark ML 2.1.0。

2 个答案:

答案 0 :(得分:1)

TL; DR 使用LogisticRegressionModel.load

  

load(path:String):LogisticRegressionModel 从输入路径读取ML实例,这是read.load(path)的快捷方式。

事实上,从Spark 2.0.0开始,推荐使用Spark MLlib的方法,包括。 LogisticRegression估算工具正在使用全新且有光泽的Pipeline API

import org.apache.spark.ml.classification._
val lr = new LogisticRegression()

import org.apache.spark.ml.feature._
val tok = new Tokenizer().setInputCol("body")
val hashTF = new HashingTF().setInputCol(tok.getOutputCol).setOutputCol("features")

import org.apache.spark.ml._
val pipeline = new Pipeline().setStages(Array(tok, hashTF, lr))

// training dataset
val emails = Seq(("hello world", 1)).toDF("body", "label")

val model = pipeline.fit(emails)

model.write.overwrite.save("mypath")
val loadedModel = PipelineModel.load("mypath")

答案 1 :(得分:1)

我遇到了与pyspark 2.1.1相同的问题,当我从LogisticRegression更改为LogisticRegressionModel时,一切运行良好。

LogisticRegression.load("/model/path") # not works 

LogisticRegressionModel.load("/model/path") # works well