2017-07-20 40 views
2

我有一個用LinearRegression處理的DataFrame。如果我做它直接,像下面,我可以顯示模型的細節:如何訪問ML管道中基礎模型的參數?

val lr = new LinearRegression() 
val lrModel = lr.fit(df) 

lrModel: org.apache.spark.ml.regression.LinearRegressionModel = linReg_b22a7bb88404 

println(s"Coefficients: ${lrModel.coefficients} Intercept: ${lrModel.intercept}") 
Coefficients: [0.9705748115939526] Intercept: 0.31041486689532866 

然而,如果I(在下面的簡化示例等)使用它管線內部,

val pipeline = new Pipeline().setStages(Array(lr)) 
val lrModel = pipeline.fit(df) 

那麼我得到以下錯誤。

scala> lrModel 
res9: org.apache.spark.ml.PipelineModel = pipeline_99ca9cba48f8 

scala> println(s"Coefficients: ${lrModel.coefficients} Intercept: ${lrModel.intercept}") 
<console>:68: error: value coefficients is not a member of org.apache.spark.ml.PipelineModel 
     println(s"Coefficients: ${lrModel.coefficients} Intercept: ${lrModel.intercept}") 
             ^
<console>:68: error: value intercept is not a member of org.apache.spark.ml.PipelineModel 
     println(s"Coefficients: ${lrModel.coefficients} Intercept: ${lrModel.intercept}") 

我明白這意味着什麼(很明顯我有一個不同的類,因爲管道的),但不知道怎麼去真正的底層模型。

回答

2

LinearRegressionModel應位於stages之內,其索引與其對應的LinearRegression完全相同。

import org.apache.spark.ml.regressio‌​n.LinearRegressionMo‌​del 
lrModel.stages(0).asInstanceOf[LinearRegressionMo‌​del]