2017-07-18 11 views
0

ためにScalaでロジスティック回帰を実行するにはは、私は以下のようにデータファイルを読んだどのようにDATAFRAME

val df = sqlContext.read.format("com.databricks.spark.csv").option("header", "true").load("D:/ModelData.csv") 


+---------+---------+---+-----+-------+ 
|c1  | c2 |c3 | c4 | c5 | 
+---------+---------+---+-----+-------+ 
|  1|  1| 13| 100|  1| 
|  1|  1| 13| 200|  0| 
|  1|  1| 13| 300|  0| 
+---------+---------+---+-----+-------+ 

それではモデルへの私の入力はC5とC4です(C1、C2、C3のすべてのために同じです。行)

val df3=df.select("c5", "c4") 

val lr = new LogisticRegression() 
     .setMaxIter(10) 
     .setRegParam(0.3) 
     .setElasticNetParam(0.8) 

val lrModel = lr.fit(df3) 

val trainingSummary = lrModel.summary 
println(trainingSummary) 

しかし、これは動作していないようです。何も表示されません。何か助けていただければ幸いです。

答えて

1

あなたのクラシファイアは、何を学ぶべきかを知る必要があります。したがって、分類子のラベル列と機能列を定義する必要があります。

フィーチャーカラムのデフォルトの名前は「フィーチャー」で、ラベルカラムのデフォルトの名前は「ラベル」です。

あなたは、列の名前を変更するか、「ラベル」と「機能」へ:

lr.fit(df3.withColumnRenamed("c4","features").withColumnRenamed("c5","label")) 

それとも、機能/ラベル列として使用する列を定義することができます

val lr = new LogisticRegression() 
    .setMaxIter(10) 
    .setRegParam(0.3) 
    .setElasticNetParam(0.8) 
    .setLabelColumn("c5") 
    .setFeaturesColumn("c4") 
2

考えますdataframe

+---+---+---+---+---+ 
|c1 |2 |c3 |c4 |c5 | 
+---+---+---+---+---+ 
|1 |1 |13 |100|1 | 
|1 |1 |13 |200|0 | 
|1 |1 |13 |300|0 | 
+---+---+---+---+---+ 

という疑問が示唆c4c5doublescolumnLogisticRegressionよう

ために必要とされる VectorAssembler

として
val assembler = new VectorAssembler() 
    .setInputCols(Array("c4")) 
    .setOutputCol("features") 

labelfeaturesカラムを用いて形成することができるLogisticRegressionlabelとしてc4c5featuresなどとc5

featuresベクターに使用されます

val df3 = assembler.transform(df).select($"c5".cast(DoubleType).as("label"), $"features") 

+-----+--------+ 
|label|features| 
+-----+--------+ 
|1.0 |[100.0] | 
|0.0 |[200.0] | 
|0.0 |[300.0] | 
+-----+--------+ 

今すぐLogisticRegression

val lr = new LogisticRegression() 
    .setMaxIter(10) 
    .setRegParam(0.3) 
    .setElasticNetParam(0.8) 

val lrModel = lr.fit(df3) 

val trainingSummary = lrModel.summary 
println(trainingSummary) 

として適用することができますされ、出力は

org.apache.[email protected]6e9f8160 
+0

なぜあなたは機能としてラベルを使用しないのですか?教師付きモデリングの目的は、ラベルを決定することです。機能としてそれを使用することは私には意味がありません。 – Rumo

+0

これはあなたがフローを理解するのを助けるための単なる例でした。ラベル以外の他の値を使うことができます。 –

+1

@Rumo私は自分の答えを更新しました。 :)今それはうまくいくはずです。ではない? –

関連する問題