2016-12-20 5 views
0

まず、スパーク1.6.0を使用します。フィーチャの選択には、pyspark.ml.regression.LinearRegressionModelでL1ペナルティを使用したいと思います。機能選択のためにpyspark.ml.regression.LinearRegressionModelでL1ペナルティを使用する方法?

しかし、関数を呼び出すときに、私は、詳細な係数を得ることができない:私はsklearn.linear_model.LogisticRegressionを使用するときながら

[0,0,0,0,0,..,-0.0871650387514,..,] 

lr = LogisticRegression(elasticNetParam=1.0, regParam=0.01,maxIter=100,fitIntercept=False,standardization=False) 
model = lr.fit(df_one_hot_train) 
print model.coefficients.toArray().astype(float).tolist() 

私だけのようなまばらなリストを取得しますモデルでは、coef_ listのようにゼロ値なしで詳細リストを得ることができます:

[0.03098372361467529,-0.13709075166114365,-0.15069548597557908,-0.017968044053830862] 

sparkでのパフォーマンスが向上しているので、作業をすばやく完了できました。私は、機能の選択にL1ペナルティを使いたいと思う。

sklearnと同じように、私の特徴選択作業にもっと詳細な係数の値を使用する必要があると思いますが、どうすれば問題を解決できますか?

答えて

0

以下は、Spark 2.1での作業コードスナップです。値を抽出するために

キーは、次のとおりです。

stages(4).asInstanceOf[LinearRegressionModel] 

スパーク1.6が同様の何かを持っていることがあります。

val holIndIndexer = new StringIndexer().setInputCol("holInd").setOutputCol("holIndIndexer") 

val holIndEncoder = new OneHotEncoder().setInputCol("holIndIndexer").setOutputCol("holIndVec") 

val time_intervaLEncoder = new OneHotEncoder().setInputCol("time_interval").setOutputCol("time_intervaLVec") 

val assemblerL1 = (new VectorAssembler() 
      .setInputCols(Array("time_intervaLVec", "holIndVec", "length")).setOutputCol("features")) 

val lrL1 = new LinearRegression().setFeaturesCol("features").setLabelCol("travel_time") 

val pipelineL1 = new Pipeline().setStages(Array(holIndIndexer,holIndEncoder,time_intervaLEncoder,assemblerL1, lrL1)) 

val modelL1 = pipelineL1.fit(dfTimeMlFull) 

val l1Coeff =modelL1.stages(4).asInstanceOf[LinearRegressionModel].coefficients 

println(l1Coeff) 
関連する問題