2017-01-21 3 views
2

この質問はthis oneに似ています。 pysparkでTrainValidationSplitを実行した後、最良のモデルパラメータを出力したいと思います。pysparkパイプラインで最高のモデルパラメータを印刷するには

pca = PCA(inputCol = 'features') 
dt = DecisionTreeRegressor(featuresCol=pca.getOutputCol(), 
          labelCol="energy") 
pipe = Pipeline(stages=[pca,dt]) 

paramgrid = ParamGridBuilder().addGrid(pca.k, range(1,50,2)).addGrid(dt.maxDepth, range(1,10,1)).build() 

tvs = TrainValidationSplit(estimator = pipe, evaluator = RegressionEvaluator(
labelCol="energy", predictionCol="prediction", metricName="mae"), estimatorParamMaps = paramgrid, trainRatio = 0.66) 

model = tvs.fit(wind_tr_va); 

ありがとう:私は、コードの

パートがある...私はjupyterと端末からのログ。消えるに取り組んでいますので、他のユーザが質問に答えるために使用するテキストの一部を見つけることができませんあらかじめ。

答えて

4

これは実際には、答えに記載されているのと同じ理由で、@ user6910411によって与えられたHow to get the maxDepth from a Spark RandomForestRegressionModelに従います。

あなたは以下のようにTrainValidationSplitModelPCAModelDecisionTreeRegressionModelにパッチを適用する必要があります:

TrainValidationSplitModel.bestModel = (
    lambda self: self._java_obj.bestModel 
) 

PCAModel.getK = (
    lambda self: self._java_obj.getK() 
) 

DecisionTreeRegressionModel.getMaxDepth = (
    lambda self: self._java_obj.getMaxDepth() 
) 

今、あなたは最良のモデルを得るためにそれを使用してkmaxDepth

bestModel = model.bestModel 

bestModelK = bestModel.stages[0].getK() 
bestModelMaxDepth = bestModel.stages[1].getMaxDepth() 

PSを抽出することができます:上記の方法と同じ方法で、特定のパラメータを得るためにモデルにパッチを当てることができます。

1

(1ライン)さらに簡単、ちょうどあなたのモデルのJVMオブジェクトに

ここ
cvModel.bestModel.stages[-1]._java_obj.getMaxDepth() 

を参照してください、あなたはこのモデルのJVMオブジェクトを呼び出して使用してMAXDEPTHパラメータを抽出し、相互検証した後、あなたのbestModelを取りますgetMaxDepth() - JVMオブジェクトのメソッド

すべてのオリジナルJVM取得パラメータのリストは、あなたが他のモデルのために他の取得パラメータを参照し、すべてのモデルの元JVMのオブジェクトを参照して抽出することができ、ここでまた https://spark.apache.org/docs/latest/api/java/org/apache/spark/ml/classification/RandomForestClassificationModel.html

見つけることができます

<yourModel>.stages[<yourModelStage>]._java_obj.<getParameter>() 

希望します。

関連する問題