【问题标题】:How to set data for logistic regression in scala?如何在scala中为逻辑回归设置数据?
【发布时间】:2017-07-07 01:04:14
【问题描述】:

我是 scala 的新手,我想实现一个逻辑回归模型。所以最初我加载了一个 csv 文件,如下所示:

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")

但它没有打印结果。

感谢任何帮助。

【问题讨论】:

    标签: scala apache-spark logistic-regression


    【解决方案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)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 2020-03-25
    • 2023-02-03
    • 2018-04-29
    • 2019-08-17
    • 2022-12-17
    • 1970-01-01
    相关资源
    最近更新 更多