2017-06-04 88 views
0

我有一個LinearRegression模型受過歷史數據的訓練,現在我試圖在新數據上重複使用同一模型來進行預測。對新數據保存並重用spark mllib LinearRegression模型

我知道我們可以分別使用model.saveLinearRegression.load方法保存和加載模型,但是,我無法找到一種方法將新數據傳遞到加載模型進行預測。

代碼,用於創建和培訓模型粘貼如下:

val assembler = new VectorAssembler().setInputCols(Array("total", "connected", "c_403", "c_480", "c_503", "hour", "day_of_week")).setOutputCol("features") 

val output = assembler.transform(df).select($"label", $"features") 
val Array(training, test) = output.select("label", "features").randomSplit(Array(0.7, 0.3), seed = 12) 

val lr = new LinearRegression() 

val paramGrid = new ParamGridBuilder().addGrid(lr.regParam, Array(0.1, 0.01)).addGrid(lr.fitIntercept).addGrid(lr.elasticNetParam, Array(0.0, 0.25, 0.5, 0.75, 1.0)).build() 


val trainvalSplit = new TrainValidationSplit().setEstimator(lr).setEvaluator(new RegressionEvaluator()).setEstimatorParamMaps(paramGrid).setTrainRatio(0.75) 
val model = trainvalSplit.fit(training) 

val holdout = model.transform(test).select("prediction","label") 
+0

你想用新的數據再訓練你的模型? – eliasah

+0

嗯實際上,我想用這個訓練好的模型來預測新數據 – Waqas

+0

你如何保存你的模型?我沒有在你分享的代碼中看到 – eliasah

回答

1

確定這是直截​​了當居然但你需要使用TrainValidationSplitModel而不是LinearRegressionModel加載模型考慮到已保存模型與model.save("/home/waqas/models/lreg")

scala> import org.apache.spark.ml.tuning.TrainValidationSplitModel 

scala> val model2 = TrainValidationSplitModel.load("/home/waqas/models/lreg") 
// model2: org.apache.spark.ml.tuning.TrainValidationSplitModel = tvs_99887a2f788d 

scala> model2.transform(newData).show(3) 
// +-----+--------------------+--------------------+ 
// |label|   features|   prediction| 
// +-----+--------------------+--------------------+ 
// | 0.0|(692,[121,122,123...| 0.11220528529664375| 
// | 0.0|(692,[122,123,148...| 0.1727599038728312| 
// | 0.0|(692,[123,124,125...|-0.09619225628995537| 
// +-----+--------------------+--------------------+ 
// only showing top 3 rows 
+0

@Waqas你需要準備你的newData ofc。 – eliasah