2016-08-03 112 views
2

我在pyspark中使用Spark Pipelines進行線性迴歸。一旦線性迴歸模型被訓練,我怎樣得到係數?如何訪問Spark PipelineModel參數

這裏是我的代碼管道:

# Get all of our features together into one array called "features". Do not include the label! 
feature_assembler = VectorAssembler(inputCols=get_column_names(df_train), outputCol="features") 

# Define our model 
lr = LinearRegression(maxIter=100, elasticNetParam=0.80, labelCol="label", featuresCol="features", 
        predictionCol = "prediction") 

# Define our pipeline 
pipeline_baseline = Pipeline(stages=[feature_assembler, lr]) 

# Train our model using the training data 
model_baseline = pipeline_baseline.fit(df_train) 

# Use our trained model to make predictions using the validation data 
output_baseline = model_baseline.transform(df_val) #.select("features", "label", "prediction", "coefficients") 
predictions_baseline = output_baseline.select("label", "prediction") 

我已經使用從PipelineModel class方法嘗試。這裏是我的嘗試得到的係數,但我只得到一個空列表和一個空的字典:

params = model_baseline.stages[1].params 
print 'Try 1 - Parameters: %s' %(params) 
params = model_baseline.stages[1].extractParamMap() 
print 'Try 2 - Parameters: %s' %(params) 

Out[]: 
Try 1 - Parameters: [] 
Try 2 - Parameters: {} 

是否有PipelineModel返回訓練的係數的方法呢?

回答

1

你看着錯誤的屬性。 params可用於提取EstimatorTransformerParams像輸入或輸出列(見ML Pipeline parameters docs,而不是估計值

對於LinearRegressionModel使用coefficients:!

model.stages[-1].coefficients 
+0

完美謝謝這正是我一直在尋找你是否也知道如何獲得超參數值(例如regParam或elasticNetParam)?這是一個新的應用程序,我正在運行一個[CrossValidator](https://spark.apache.org/docs/2.0 .0/api/python/pyspark.ml.html?highlight = crossvalidator#pyspark.ml.tuning.CrossValidator)實例來嘗試不同的超參數。我找到了最好的模型,我想知道最佳模型使用哪些超參數。 'model.bestModel.stages [-1] .coefficients'得到最佳線性迴歸模型的係數。 –