2017-07-07 4 views
0

私はスカラ座に新しいですし、私が最初に私は以下のようにcsvファイルを読み込むロジスティック回帰model.Soを実装する:スカラーのロジスティック回帰のデータを設定する方法は?

val sqlContext = new org.apache.spark.sql.SQLContext(sc) 
val df = sqlContext.read.format("com.databricks.spark.csv") 
    .option("header", "true") 
    .option("inferSchema", "true") 
    .load("D:/sample.txt") 

ファイルは以下の通りです:

P,P,A,A,A,P,NB 
N,N,A,A,A,N,NB 
A,A,A,A,A,A,NB 
P,P,P,P,P,P,NB 
N,N,P,P,P,N,NB 
A,A,P,P,P,A,NB 
P,P,A,P,P,P,NB 
P,P,P,A,A,P,NB 
P,P,A,P,A,P,NB 
P,P,A,A,P,P,NB 
P,P,P,P,A,P,NB 
P,P,P,A,P,P,NB 
N,N,A,P,P,N,NB 
N,N,P,A,A,N,NB 
N,N,A,P,A,N,NB 
N,N,A,P,A,N,NB 
N,N,A,A,P,N,NB 
N,N,P,P,A,N,NB 
N,N,P,A,P,N,NB 
A,A,A,P,P,A,NB 
A,A,P,A,A,A,NB 
A,A,A,P,A,A,NB 
A,A,A,A,P,A,NB 
A,A,P,P,A,A,NB 
A,A,P,A,P,A,NB 
P,N,A,A,A,P,NB 
N,P,A,A,A,N,NB 
P,N,A,A,A,N,NB 
P,N,P,P,P,P,NB 
N,P,P,P,P,N,NB 

その後、私はしたいですコードの下でモデルを訓練するために:

val lr = new LogisticRegression() 
     .setMaxIter(10) 
     .setRegParam(0.3) 
     .setElasticNetParam(0.8) 
     .setFeaturesCol("Feature") 
     .setLabelCol("Label") 

その後、私は以下のことでモデルをフィット:

val lrModel = lr.fit(df) 

println(lrModel.coefficients +"are the coefficients") 
println(lrModel.interceptVector+"are the intercerpt vactor") 
println(lrModel.summary +"is summary") 

しかし、結果は印刷されません。

何か助けていただければ幸いです。あなたのコードから

答えて

1

val lr = new LogisticRegression() 
     .setMaxIter(10) 
     .setRegParam(0.3) 
     .setElasticNetParam(0.8) 
     .setFeaturesCol("Feature") <- here 
     .setLabelCol("Label") <- here 

あなたはfeatures列とlabel列を設定しています。列名について言及していないので、私はNBの値を含む列がラベルであり、他の列をすべて含めたいと思っています。予測の列です。

モデルに含めるすべての予測変数は、通常はfeatures列と呼ばれる単一ベクトル列の形式である必要があります。あなたは、次のようVectorAssemblerを使用して、それを作成する必要があります。

import org.apache.spark.ml.feature.VectorAssembler 
import org.apache.spark.ml.linalg.Vectors 

//creating features column 
val assembler = new VectorAssembler() 
    .setInputCols(Array(" insert your column names here ")) 
    .setOutputCol("Feature") 

参照してください:https://spark.apache.org/docs/latest/ml-features.html#vectorassembler

これでロジスティック回帰モデルを適合させることができます。 pipelineは、fittingのデータの前に複数の変換を結合するために使用されます。

val pipeline = new Pipeline().setStages(Array(assembler,lr)) 

//fitting the model 
val lrModel = pipeline.fit(df) 
+0

私はこれを使用する場合lrModelは、MLが唯一の入力として数値を取ることができる – Ricky

+0

スパークのようなものである理由を説明してください任意の係数、要約またはその他のthings.Couldを生成することはできません。列にはカテゴリ値(P、N、A、...)が含まれていると予測されるため、数値を最初に数値に変換する必要があります。 'StringIndexer'または' OneHotEncoder'を使ってそれを行い、結果の列名を 'VectorAssembler'入力に渡します。 https://spark.apache.org/docs/latest/ml-features.html#stringindexerとhttps://spark.apache.org/docs/latest/ml-features.html#onehotencoderを参照してください。私はそれがあなたにはっきりと願っています。 – vdep

関連する問題