我正在使用Scala和Spark 2.0来训练一个使用LinearRegression的模型.
val lr = new LinearRegression()
.setMaxIter(num_iter)
.setRegParam(reg)
.setStandardization(true)
val model = lr.fit(data)
Run Code Online (Sandbox Code Playgroud)
这工作正常,我得到了很好的结果.我保存了模型并将其加载到另一个类中以进行一些预测:
val model = LinearRegressionModel.load("models/LRModel")
val result = model.transform(data).select("prediction")
Run Code Online (Sandbox Code Playgroud)
现在我想继续用新数据训练模型,所以我保存了模型并加载它以继续训练.
保存:
model.save("models/LRModel")
lr.save("models/LR")
Run Code Online (Sandbox Code Playgroud)
加载:
val lr = LinearRegression.load("models/LR")
val model = LinearRegressionModel.load("models/LRModel")
Run Code Online (Sandbox Code Playgroud)
问题是,当我加载模型时,没有fit或没有train继续训练的功能.当我加载LinearRegression对象时,它似乎不保存权重,只保存算法的参数.我通过训练相同数量的相同迭代次数来测试它,结果完全相同,rootMeanSquaredError并且在这个学习点上肯定没有收敛.我也无法将模型加载到LinearRegression中,导致错误:
Exception in thread "main" java.lang.NoSuchMethodException: org.apache.spark.ml.regression.LinearRegressionModel.<init>(java.lang.String)
Run Code Online (Sandbox Code Playgroud)
所以问题是,如何让LinearRegression对象使用保存的LinearRegressionModel?