Извлечение весов из множественной линейной регрессии FlinkML

Я использую пример множественной линейной регрессии для Flink (0.10-SNAPSHOT). Я не могу понять, как извлечь веса (например, наклон и перехват, бета0-бета1, как вы хотите их называть). Я не супер опытный в Скале, это, наверное, половина моей проблемы.

Спасибо за любую помощь, которую может дать любой.

object Job {
 def main(args: Array[String]) {
    // set up the execution environment
    val env = ExecutionEnvironment.getExecutionEnvironment

    val survival = env.readCsvFile[(String, String, String, String)]("/home/danger/IdeaProjects/quickstart/docs/haberman.data")

    val survivalLV = survival
      .map{tuple =>
      val list = tuple.productIterator.toList
      val numList = list.map(_.asInstanceOf[String].toDouble)
      LabeledVector(numList(3), DenseVector(numList.take(3).toArray))
    }

    val mlr = MultipleLinearRegression()
      .setStepsize(1.0)
      .setIterations(100)
      .setConvergenceThreshold(0.001)

    mlr.fit(survivalLV) 
    println(mlr.toString())     // This doesn't do anything productive...
    println(mlr.weightsOption)  // Neither does this.

  }
}

1 ответ

Решение

Проблема в том, что вы создали только задание Flink (DAG), которое будет вычислять веса, но оно еще не выполнено. Самый простой способ запустить выполнение - использовать collect метод, который будет получать результат DataSet вернуться к вашему клиенту.

mlr.fit(survivalLV)

val weights = mlr.weightsOption match {
  case Some(weights) => weights.collect()
  case None => throw new Exception("Could not calculate the weights.")
}

println(weights)
Другие вопросы по тегам