我已经阅读了如下数据文件:
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)
但这似乎不起作用。它不会打印任何东西。感谢任何帮助。
答案 0 :(得分:2)
鉴于dataframe
为
+---+---+---+---+---+
|c1 |2 |c3 |c4 |c5 |
+---+---+---+---+---+
|1 |1 |13 |100|1 |
|1 |1 |13 |200|0 |
|1 |1 |13 |300|0 |
+---+---+---+---+---+
该问题表明,c4
和c5
将用于LogisticRegression
(c4
和c5
作为features
和{{1}作为c5
)
label
features
的{{1}}向量column
可以使用doubles
形成
VectorAssembler
val assembler = new VectorAssembler()
.setInputCols(Array("c4"))
.setOutputCol("features")
所以需要 label
和features
列
LogisticRegression
是
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)
答案 1 :(得分: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")