Spark LogisticRegression 逻辑回归之建模

导入包

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.Dataset
import org.apache.spark.sql.Row
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.Column
import org.apache.spark.sql.DataFrameReader
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder
import org.apache.spark.sql.Encoder
import org.apache.spark.sql.DataFrameStatFunctions
import org.apache.spark.sql.functions._

import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.evaluation.BinaryClassificationEvaluator
import org.apache.spark.ml.classification.LogisticRegression
import org.apache.spark.ml.classification.{ BinaryLogisticRegressionSummary, LogisticRegression }
import org.apache.spark.ml.tuning.{ ParamGridBuilder, TrainValidationSplit }

 

导入源数据

val spark = SparkSession.builder().appName("Spark Logistic Regression").config("spark.some.config.option", "some-value").getOrCreate()

// For implicit conversions like converting RDDs to DataFrames
import spark.implicits._

val dataList: List[(Double, String, Double, Double, String, Double, Double, Double, Double)] = List(  
      (0, "male", 37, 10, "no", 3, 18, 7, 4),  
      (0, "female", 27, 4, "no", 4, 14, 6, 4),  
      (0, "female", 32, 15, "yes", 1, 12, 1, 4),  
      (0, "male", 57, 15, "yes", 5, 18, 6, 5),  
      (0, "male", 22, 0.75, "no", 2, 17, 6, 3),  
      (0, "female", 32, 1.5, "no", 2, 17, 5, 5),  
      (0, "female", 22, 0.75, "no", 2, 12, 1, 3),  
      (0, "male", 57, 15, "yes", 2, 14, 4, 4),  
      (0, "female", 32, 15, "yes", 4, 16, 1, 2),  
      (0, "male", 22, 1.5, "no", 4, 14, 4, 5),  
      (0, "male", 37, 15, "yes", 2, 20, 7, 2),  
      (0, "male", 27, 4, "yes", 4, 18, 6, 4),  
      (0, "male", 47, 15, "yes", 5, 17, 6, 4),  
      (0, "female", 22, 1.5, "no", 2, 17, 5, 4),  
      (0, "female", 27, 4, "no", 4, 14, 5, 4),  
      (0, "female", 37, 15, "yes", 1, 17, 5, 5),  
      (0, "female", 37, 15, "yes", 2, 18, 4, 3),  
      (0, "female", 22, 0.75, "no", 3, 16, 5, 4),  
      (0, "female", 22, 1.5, "no", 2, 16, 5, 5),  
      (0, "female", 27, 10, "yes", 2, 14, 1, 5),  
      (0, "female", 22, 1.5, "no", 2, 16, 5, 5),  
      (0, "female", 22, 1.5, "no", 2, 16, 5, 5),  
      (0, "female", 27, 10, "yes", 4, 16, 5, 4),  
      (0, "female", 32, 10, "yes", 3, 14, 1, 5),  
      (0, "male", 37, 4, "yes", 2, 20, 6, 4),  
      (0, "female", 22, 1.5, "no", 2, 18, 5, 5),  
      (0, "female", 27, 7, "no", 4, 16, 1, 5),  
      (0, "male", 42, 15, "yes", 5, 20, 6, 4),  
      (0, "male", 27, 4, "yes", 3, 16, 5, 5),  
      (0, "female", 27, 4, "yes", 3, 17, 5, 4),  
      (0, "male", 42, 15, "yes", 4, 20, 6, 3),  
      (0, "female", 22, 1.5, "no", 3, 16, 5, 5),  
      (0, "male", 27, 0.417, "no", 4, 17, 6, 4),  
      (0, "female", 42, 15, "yes", 5, 14, 5, 4),  
      (0, "male", 32, 4, "yes", 1, 18, 6, 4),  
      (0, "female", 22, 1.5, "no", 4, 16, 5, 3),  
      (0, "female", 42, 15, "yes", 3, 12, 1, 4),  
      (0, "female", 22, 4, "no", 4, 17, 5, 5),  
      (0, "male", 22, 1.5, "yes", 1, 14, 3, 5),  
      (0, "female", 22, 0.75, "no", 3, 16, 1, 5),  
      (0, "male", 32, 10, "yes", 5, 20, 6, 5),  
      (0, "male", 52, 15, "yes", 5, 18, 6, 3),  
      (0, "female", 22, 0.417, "no", 5, 14, 1, 4),  
      (0, "female", 27, 4, "yes", 2, 18, 6, 1),  
      (0, "female", 32, 7, "yes", 5, 17, 5, 3),  
      (0, "male", 22, 4, "no", 3, 16, 5, 5),  
      (0, "female", 27, 7, "yes", 4, 18, 6, 5),  
      (0, "female", 42, 15, "yes", 2, 18, 5, 4),  
      (0, "male", 27, 1.5, "yes", 4, 16, 3, 5),  
      (0, "male", 42, 15, "yes", 2, 20, 6, 4),  
      (0, "female", 22, 0.75, "no", 5, 14, 3, 5),  
      (0, "male", 32, 7, "yes", 2, 20, 6, 4),  
      (0, "male", 27, 4, "yes", 5, 20, 6, 5),  
      (0, "male", 27, 10, "yes", 4, 20, 6, 4),  
      (0, "male", 22, 4, "no", 1, 18, 5, 5),  
      (0, "female", 37, 15, "yes", 4, 14, 3, 1),  
      (0, "male", 22, 1.5, "yes", 5, 16, 4, 4),  
      (0, "female", 37, 15, "yes", 4, 17, 1, 5),  
      (0, "female", 27, 0.75, "no", 4, 17, 5, 4),  
      (0, "male", 32, 10, "yes", 4, 20, 6, 4),  
      (0, "female", 47, 15, "yes", 5, 14, 7, 2),  
      (0, "male", 37, 10, "yes", 3, 20, 6, 4),  
      (0, "female", 22, 0.75, "no", 2, 16, 5, 5),  
      (0, "male", 27, 4, "no", 2, 18, 4, 5),  
      (0, "male", 32, 7, "no", 4, 20, 6, 4),  
      (0, "male", 42, 15, "yes", 2, 17, 3, 5),  
      (0, "male", 37, 10, "yes", 4, 20, 6, 4),  
      (0, "female", 47, 15, "yes", 3, 17, 6, 5),  
      (0, "female", 22, 1.5, "no", 5, 16, 5, 5),  
      (0, "female", 27, 1.5, "no", 2, 16, 6, 4),  
      (0, "female", 27, 4, "no", 3, 17, 5, 5),  
      (0, "female", 32, 10, "yes", 5, 14, 4, 5),  
      (0, "female", 22, 0.125, "no", 2, 12, 5, 5),  
      (0, "male", 47, 15, "yes", 4, 14, 4, 3),  
      (0, "male", 32, 15, "yes", 1, 14, 5, 5),  
      (0, "male", 27, 7, "yes", 4, 16, 5, 5),  
      (0, "female", 22, 1.5, "yes", 3, 16, 5, 5),  
      (0, "male", 27, 4, "yes", 3, 17, 6, 5),  
      (0, "female", 22, 1.5, "no", 3, 16, 5, 5),  
      (0, "male", 57, 15, "yes", 2, 14, 7, 2),  
      (0, "male", 17.5, 1.5, "yes", 3, 18, 6, 5),  
      (0, "male", 57, 15, "yes", 4, 20, 6, 5),  
      (0, "female", 22, 0.75, "no", 2, 16, 3, 4),  
      (0, "male", 42, 4, "no", 4, 17, 3, 3),  
      (0, "female", 22, 1.5, "yes", 4, 12, 1, 5),  
      (0, "female", 22, 0.417, "no", 1, 17, 6, 4),  
      (0, "female", 32, 15, "yes", 4, 17, 5, 5),  
      (0, "female", 27, 1.5, "no", 3, 18, 5, 2),  
      (0, "female", 22, 1.5, "yes", 3, 14, 1, 5),  
      (0, "female", 37, 15, "yes", 3, 14, 1, 4),  
      (0, "female", 32, 15, "yes", 4, 14, 3, 4),  
      (0, "male", 37, 10, "yes", 2, 14, 5, 3),  
      (0, "male", 37, 10, "yes", 4, 16, 5, 4),  
      (0, "male", 57, 15, "yes", 5, 20, 5, 3),  
      (0, "male", 27, 0.417, "no", 1, 16, 3, 4),  
      (0, "female", 42, 15, "yes", 5, 14, 1, 5),  
      (0, "male", 57, 15, "yes", 3, 16, 6, 1),  
      (0, "male", 37, 10, "yes", 1, 16, 6, 4),  
      (0, "male", 37, 15, "yes", 3, 17, 5, 5),  
      (0, "male", 37, 15, "yes", 4, 20, 6, 5),  
      (0, "female", 27, 10, "yes", 5, 14, 1, 5),  
      (0, "male", 37, 10, "yes", 2, 18, 6, 4),  
      (0, "female", 22, 0.125, "no", 4, 12, 4, 5),  
      (0, "male", 57, 15, "yes", 5, 20, 6, 5),  
      (0, "female", 37, 15, "yes", 4, 18, 6, 4),  
      (0, "male", 22, 4, "yes", 4, 14, 6, 4),  
      (0, "male", 27, 7, "yes", 4, 18, 5, 4),  
      (0, "male", 57, 15, "yes", 4, 20, 5, 4),  
      (0, "male", 32, 15, "yes", 3, 14, 6, 3),  
      (0, "female", 22, 1.5, "no", 2, 14, 5, 4),  
      (0, "female", 32, 7, "yes", 4, 17, 1, 5),  
      (0, "female", 37, 15, "yes", 4, 17, 6, 5),  
      (0, "female", 32, 1.5, "no", 5, 18, 5, 5),  
      (0, "male", 42, 10, "yes", 5, 20, 7, 4),  
      (0, "female", 27, 7, "no", 3, 16, 5, 4),  
      (0, "male", 37, 15, "no", 4, 20, 6, 5),  
      (0, "male", 37, 15, "yes", 4, 14, 3, 2),  
      (0, "male", 32, 10, "no", 5, 18, 6, 4),  
      (0, "female", 22, 0.75, "no", 4, 16, 1, 5),  
      (0, "female", 27, 7, "yes", 4, 12, 2, 4),  
      (0, "female", 27, 7, "yes", 2, 16, 2, 5),  
      (0, "female", 42, 15, "yes", 5, 18, 5, 4),  
      (0, "male", 42, 15, "yes", 4, 17, 5, 3),  
      (0, "female", 27, 7, "yes", 2, 16, 1, 2),  
      (0, "female", 22, 1.5, "no", 3, 16, 5, 5),  
      (0, "male", 37, 15, "yes", 5, 20, 6, 5),  
      (0, "female", 22, 0.125, "no", 2, 14, 4, 5),  
      (0, "male", 27, 1.5, "no", 4, 16, 5, 5),  
      (0, "male", 32, 1.5, "no", 2, 18, 6, 5),  
      (0, "male", 27, 1.5, "no", 2, 17, 6, 5),  
      (0, "female", 27, 10, "yes", 4, 16, 1, 3),  
      (0, "male", 42, 15, "yes", 4, 18, 6, 5),  
      (0, "female", 27, 1.5, "no", 2, 16, 6, 5),  
      (0, "male", 27, 4, "no", 2, 18, 6, 3),  
      (0, "female", 32, 10, "yes", 3, 14, 5, 3),  
      (0, "female", 32, 15, "yes", 3, 18, 5, 4),  
      (0, "female", 22, 0.75, "no", 2, 18, 6, 5),  
      (0, "female", 37, 15, "yes", 2, 16, 1, 4),  
      (0, "male", 27, 4, "yes", 4, 20, 5, 5),  
      (0, "male", 27, 4, "no", 1, 20, 5, 4),  
      (0, "female", 27, 10, "yes", 2, 12, 1, 4),  
      (0, "female", 32, 15, "yes", 5, 18, 6, 4),  
      (0, "male", 27, 7, "yes", 5, 12, 5, 3),  
      (0, "male", 52, 15, "yes", 2, 18, 5, 4),  
      (0, "male", 27, 4, "no", 3, 20, 6, 3),  
      (0, "male", 37, 4, "yes", 1, 18, 5, 4),  
      (0, "male", 27, 4, "yes", 4, 14, 5, 4),  
      (0, "female", 52, 15, "yes", 5, 12, 1, 3),  
      (0, "female", 57, 15, "yes", 4, 16, 6, 4),  
      (0, "male", 27, 7, "yes", 1, 16, 5, 4),  
      (0, "male", 37, 7, "yes", 4, 20, 6, 3),  
      (0, "male", 22, 0.75, "no", 2, 14, 4, 3),  
      (0, "male", 32, 4, "yes", 2, 18, 5, 3),  
      (0, "male", 37, 15, "yes", 4, 20, 6, 3),  
      (0, "male", 22, 0.75, "yes", 2, 14, 4, 3),  
      (0, "male", 42, 15, "yes", 4, 20, 6, 3),  
      (0, "female", 52, 15, "yes", 5, 17, 1, 1),  
      (0, "female", 37, 15, "yes", 4, 14, 1, 2),  
      (0, "male", 27, 7, "yes", 4, 14, 5, 3),  
      (0, "male", 32, 4, "yes", 2, 16, 5, 5),  
      (0, "female", 27, 4, "yes", 2, 18, 6, 5),  
      (0, "female", 27, 4, "yes", 2, 18, 5, 5),  
      (0, "male", 37, 15, "yes", 5, 18, 6, 5),  
      (0, "female", 47, 15, "yes", 5, 12, 5, 4),  
      (0, "female", 32, 10, "yes", 3, 17, 1, 4),  
      (0, "female", 27, 1.5, "yes", 4, 17, 1, 2),  
      (0, "female", 57, 15, "yes", 2, 18, 5, 2),  
      (0, "female", 22, 1.5, "no", 4, 14, 5, 4),  
      (0, "male", 42, 15, "yes", 3, 14, 3, 4),  
      (0, "male", 57, 15, "yes", 4, 9, 2, 2),  
      (0, "male", 57, 15, "yes", 4, 20, 6, 5),  
      (0, "female", 22, 0.125, "no", 4, 14, 4, 5),  
      (0, "female", 32, 10, "yes", 4, 14, 1, 5),  
      (0, "female", 42, 15, "yes", 3, 18, 5, 4),  
      (0, "female", 27, 1.5, "no", 2, 18, 6, 5),  
      (0, "male", 32, 0.125, "yes", 2, 18, 5, 2),  
      (0, "female", 27, 4, "no", 3, 16, 5, 4),  
      (0, "female", 27, 10, "yes", 2, 16, 1, 4),  
      (0, "female", 32, 7, "yes", 4, 16, 1, 3),  
      (0, "female", 37, 15, "yes", 4, 14, 5, 4),  
      (0, "female", 42, 15, "yes", 5, 17, 6, 2),  
      (0, "male", 32, 1.5, "yes", 4, 14, 6, 5),  
      (0, "female", 32, 4, "yes", 3, 17, 5, 3),  
      (0, "female", 37, 7, "no", 4, 18, 5, 5),  
      (0, "female", 22, 0.417, "yes", 3, 14, 3, 5),  
      (0, "female", 27, 7, "yes", 4, 14, 1, 5),  
      (0, "male", 27, 0.75, "no", 3, 16, 5, 5),  
      (0, "male", 27, 4, "yes", 2, 20, 5, 5),  
      (0, "male", 32, 10, "yes", 4, 16, 4, 5),  
      (0, "male", 32, 15, "yes", 1, 14, 5, 5),  
      (0, "male", 22, 0.75, "no", 3, 17, 4, 5),  
      (0, "female", 27, 7, "yes", 4, 17, 1, 4),  
      (0, "male", 27, 0.417, "yes", 4, 20, 5, 4),  
      (0, "male", 37, 15, "yes", 4, 20, 5, 4),  
      (0, "female", 37, 15, "yes", 2, 14, 1, 3),  
      (0, "male", 22, 4, "yes", 1, 18, 5, 4),  
      (0, "male", 37, 15, "yes", 4, 17, 5, 3),  
      (0, "female", 22, 1.5, "no", 2, 14, 4, 5),  
      (0, "male", 52, 15, "yes", 4, 14, 6, 2),  
      (0, "female", 22, 1.5, "no", 4, 17, 5, 5),  
      (0, "male", 32, 4, "yes", 5, 14, 3, 5),  
      (0, "male", 32, 4, "yes", 2, 14, 3, 5),  
      (0, "female", 22, 1.5, "no", 3, 16, 6, 5),  
      (0, "male", 27, 0.75, "no", 2, 18, 3, 3),  
      (0, "female", 22, 7, "yes", 2, 14, 5, 2),  
      (0, "female", 27, 0.75, "no", 2, 17, 5, 3),  
      (0, "female", 37, 15, "yes", 4, 12, 1, 2),  
      (0, "female", 22, 1.5, "no", 1, 14, 1, 5),  
      (0, "female", 37, 10, "no", 2, 12, 4, 4),  
      (0, "female", 37, 15, "yes", 4, 18, 5, 3),  
      (0, "female", 42, 15, "yes", 3, 12, 3, 3),  
      (0, "male", 22, 4, "no", 2, 18, 5, 5),  
      (0, "male", 52, 7, "yes", 2, 20, 6, 2),  
      (0, "male", 27, 0.75, "no", 2, 17, 5, 5),  
      (0, "female", 27, 4, "no", 2, 17, 4, 5),  
      (0, "male", 42, 1.5, "no", 5, 20, 6, 5),  
      (0, "male", 22, 1.5, "no", 4, 17, 6, 5),  
      (0, "male", 22, 4, "no", 4, 17, 5, 3),  
      (0, "female", 22, 4, "yes", 1, 14, 5, 4),  
      (0, "male", 37, 15, "yes", 5, 20, 4, 5),  
      (0, "female", 37, 10, "yes", 3, 16, 6, 3),  
      (0, "male", 42, 15, "yes", 4, 17, 6, 5),  
      (0, "female", 47, 15, "yes", 4, 17, 5, 5),  
      (0, "male", 22, 1.5, "no", 4, 16, 5, 4),  
      (0, "female", 32, 10, "yes", 3, 12, 1, 4),  
      (0, "female", 22, 7, "yes", 1, 14, 3, 5),  
      (0, "female", 32, 10, "yes", 4, 17, 5, 4),  
      (0, "male", 27, 1.5, "yes", 2, 16, 2, 4),  
      (0, "male", 37, 15, "yes", 4, 14, 5, 5),  
      (0, "male", 42, 4, "yes", 3, 14, 4, 5),  
      (0, "female", 37, 15, "yes", 5, 14, 5, 4),  
      (0, "female", 32, 7, "yes", 4, 17, 5, 5),  
      (0, "female", 42, 15, "yes", 4, 18, 6, 5),  
      (0, "male", 27, 4, "no", 4, 18, 6, 4),  
      (0, "male", 22, 0.75, "no", 4, 18, 6, 5),  
      (0, "male", 27, 4, "yes", 4, 14, 5, 3),  
      (0, "female", 22, 0.75, "no", 5, 18, 1, 5),  
      (0, "female", 52, 15, "yes", 5, 9, 5, 5),  
      (0, "male", 32, 10, "yes", 3, 14, 5, 5),  
      (0, "female", 37, 15, "yes", 4, 16, 4, 4),  
      (0, "male", 32, 7, "yes", 2, 20, 5, 4),  
      (0, "female", 42, 15, "yes", 3, 18, 1, 4),  
      (0, "male", 32, 15, "yes", 1, 16, 5, 5),  
      (0, "male", 27, 4, "yes", 3, 18, 5, 5),  
      (0, "female", 32, 15, "yes", 4, 12, 3, 4),  
      (0, "male", 22, 0.75, "yes", 3, 14, 2, 4),  
      (0, "female", 22, 1.5, "no", 3, 16, 5, 3),  
      (0, "female", 42, 15, "yes", 4, 14, 3, 5),  
      (0, "female", 52, 15, "yes", 3, 16, 5, 4),  
      (0, "male", 37, 15, "yes", 5, 20, 6, 4),  
      (0, "female", 47, 15, "yes", 4, 12, 2, 3),  
      (0, "male", 57, 15, "yes", 2, 20, 6, 4),  
      (0, "male", 32, 7, "yes", 4, 17, 5, 5),  
      (0, "female", 27, 7, "yes", 4, 17, 1, 4),  
      (0, "male", 22, 1.5, "no", 1, 18, 6, 5),  
      (0, "female", 22, 4, "yes", 3, 9, 1, 4),  
      (0, "female", 22, 1.5, "no", 2, 14, 1, 5),  
      (0, "male", 42, 15, "yes", 2, 20, 6, 4),  
      (0, "male", 57, 15, "yes", 4, 9, 2, 4),  
      (0, "female", 27, 7, "yes", 2, 18, 1, 5),  
      (0, "female", 22, 4, "yes", 3, 14, 1, 5),  
      (0, "male", 37, 15, "yes", 4, 14, 5, 3),  
      (0, "male", 32, 7, "yes", 1, 18, 6, 4),  
      (0, "female", 22, 1.5, "no", 2, 14, 5, 5),  
      (0, "female", 22, 1.5, "yes", 3, 12, 1, 3),  
      (0, "male", 52, 15, "yes", 2, 14, 5, 5),  
      (0, "female", 37, 15, "yes", 2, 14, 1, 1),  
      (0, "female", 32, 10, "yes", 2, 14, 5, 5),  
      (0, "male", 42, 15, "yes", 4, 20, 4, 5),  
      (0, "female", 27, 4, "yes", 3, 18, 4, 5),  
      (0, "male", 37, 15, "yes", 4, 20, 6, 5),  
      (0, "male", 27, 1.5, "no", 3, 18, 5, 5),  
      (0, "female", 22, 0.125, "no", 2, 16, 6, 3),  
      (0, "male", 32, 10, "yes", 2, 20, 6, 3),  
      (0, "female", 27, 4, "no", 4, 18, 5, 4),  
      (0, "female", 27, 7, "yes", 2, 12, 5, 1),  
      (0, "male", 32, 4, "yes", 5, 18, 6, 3),  
      (0, "female", 37, 15, "yes", 2, 17, 5, 5),  
      (0, "male", 47, 15, "no", 4, 20, 6, 4),  
      (0, "male", 27, 1.5, "no", 1, 18, 5, 5),  
      (0, "male", 37, 15, "yes", 4, 20, 6, 4),  
      (0, "female", 32, 15, "yes", 4, 18, 1, 4),  
      (0, "female", 32, 7, "yes", 4, 17, 5, 4),  
      (0, "female", 42, 15, "yes", 3, 14, 1, 3),  
      (0, "female", 27, 7, "yes", 3, 16, 1, 4),  
      (0, "male", 27, 1.5, "no", 3, 16, 4, 2),  
      (0, "male", 22, 1.5, "no", 3, 16, 3, 5),  
      (0, "male", 27, 4, "yes", 3, 16, 4, 2),  
      (0, "female", 27, 7, "yes", 3, 12, 1, 2),  
      (0, "female", 37, 15, "yes", 2, 18, 5, 4),  
      (0, "female", 37, 7, "yes", 3, 14, 4, 4),  
      (0, "male", 22, 1.5, "no", 2, 16, 5, 5),  
      (0, "male", 37, 15, "yes", 5, 20, 5, 4),  
      (0, "female", 22, 1.5, "no", 4, 16, 5, 3),  
      (0, "female", 32, 10, "yes", 4, 16, 1, 5),  
      (0, "male", 27, 4, "no", 2, 17, 5, 3),  
      (0, "female", 22, 0.417, "no", 4, 14, 5, 5),  
      (0, "female", 27, 4, "no", 2, 18, 5, 5),  
      (0, "male", 37, 15, "yes", 4, 18, 5, 3),  
      (0, "male", 37, 10, "yes", 5, 20, 7, 4),  
      (0, "female", 27, 7, "yes", 2, 14, 4, 2),  
      (0, "male", 32, 4, "yes", 2, 16, 5, 5),  
      (0, "male", 32, 4, "yes", 2, 16, 6, 4),  
      (0, "male", 22, 1.5, "no", 3, 18, 4, 5),  
      (0, "female", 22, 4, "yes", 4, 14, 3, 4),  
      (0, "female", 17.5, 0.75, "no", 2, 18, 5, 4),  
      (0, "male", 32, 10, "yes", 4, 20, 4, 5),  
      (0, "female", 32, 0.75, "no", 5, 14, 3, 3),  
      (0, "male", 37, 15, "yes", 4, 17, 5, 3),  
      (0, "male", 32, 4, "no", 3, 14, 4, 5),  
      (0, "female", 27, 1.5, "no", 2, 17, 3, 2),  
      (0, "female", 22, 7, "yes", 4, 14, 1, 5),  
      (0, "male", 47, 15, "yes", 5, 14, 6, 5),  
      (0, "male", 27, 4, "yes", 1, 16, 4, 4),  
      (0, "female", 37, 15, "yes", 5, 14, 1, 3),  
      (0, "male", 42, 4, "yes", 4, 18, 5, 5),  
      (0, "female", 32, 4, "yes", 2, 14, 1, 5),  
      (0, "male", 52, 15, "yes", 2, 14, 7, 4),  
      (0, "female", 22, 1.5, "no", 2, 16, 1, 4),  
      (0, "male", 52, 15, "yes", 4, 12, 2, 4),  
      (0, "female", 22, 0.417, "no", 3, 17, 1, 5),  
      (0, "female", 22, 1.5, "no", 2, 16, 5, 5),  
      (0, "male", 27, 4, "yes", 4, 20, 6, 4),  
      (0, "female", 32, 15, "yes", 4, 14, 1, 5),  
      (0, "female", 27, 1.5, "no", 2, 16, 3, 5),  
      (0, "male", 32, 4, "no", 1, 20, 6, 5),  
      (0, "male", 37, 15, "yes", 3, 20, 6, 4),  
      (0, "female", 32, 10, "no", 2, 16, 6, 5),  
      (0, "female", 32, 10, "yes", 5, 14, 5, 5),  
      (0, "male", 37, 1.5, "yes", 4, 18, 5, 3),  
      (0, "male", 32, 1.5, "no", 2, 18, 4, 4),  
      (0, "female", 32, 10, "yes", 4, 14, 1, 4),  
      (0, "female", 47, 15, "yes", 4, 18, 5, 4),  
      (0, "female", 27, 10, "yes", 5, 12, 1, 5),  
      (0, "male", 27, 4, "yes", 3, 16, 4, 5),  
      (0, "female", 37, 15, "yes", 4, 12, 4, 2),  
      (0, "female", 27, 0.75, "no", 4, 16, 5, 5),  
      (0, "female", 37, 15, "yes", 4, 16, 1, 5),  
      (0, "female", 32, 15, "yes", 3, 16, 1, 5),  
      (0, "female", 27, 10, "yes", 2, 16, 1, 5),  
      (0, "male", 27, 7, "no", 2, 20, 6, 5),  
      (0, "female", 37, 15, "yes", 2, 14, 1, 3),  
      (0, "male", 27, 1.5, "yes", 2, 17, 4, 4),  
      (0, "female", 22, 0.75, "yes", 2, 14, 1, 5),  
      (0, "male", 22, 4, "yes", 4, 14, 2, 4),  
      (0, "male", 42, 0.125, "no", 4, 17, 6, 4),  
      (0, "male", 27, 1.5, "yes", 4, 18, 6, 5),  
      (0, "male", 27, 7, "yes", 3, 16, 6, 3),  
      (0, "female", 52, 15, "yes", 4, 14, 1, 3),  
      (0, "male", 27, 1.5, "no", 5, 20, 5, 2),  
      (0, "female", 27, 1.5, "no", 2, 16, 5, 5),  
      (0, "female", 27, 1.5, "no", 3, 17, 5, 5),  
      (0, "male", 22, 0.125, "no", 5, 16, 4, 4),  
      (0, "female", 27, 4, "yes", 4, 16, 1, 5),  
      (0, "female", 27, 4, "yes", 4, 12, 1, 5),  
      (0, "female", 47, 15, "yes", 2, 14, 5, 5),  
      (0, "female", 32, 15, "yes", 3, 14, 5, 3),  
      (0, "male", 42, 7, "yes", 2, 16, 5, 5),  
      (0, "male", 22, 0.75, "no", 4, 16, 6, 4),  
      (0, "male", 27, 0.125, "no", 3, 20, 6, 5),  
      (0, "male", 32, 10, "yes", 3, 20, 6, 5),  
      (0, "female", 22, 0.417, "no", 5, 14, 4, 5),  
      (0, "female", 47, 15, "yes", 5, 14, 1, 4),  
      (0, "female", 32, 10, "yes", 3, 14, 1, 5),  
      (0, "male", 57, 15, "yes", 4, 17, 5, 5),  
      (0, "male", 27, 4, "yes", 3, 20, 6, 5),  
      (0, "female", 32, 7, "yes", 4, 17, 1, 5),  
      (0, "female", 37, 10, "yes", 4, 16, 1, 5),  
      (0, "female", 32, 10, "yes", 1, 18, 1, 4),  
      (0, "female", 22, 4, "no", 3, 14, 1, 4),  
      (0, "female", 27, 7, "yes", 4, 14, 3, 2),  
      (0, "male", 57, 15, "yes", 5, 18, 5, 2),  
      (0, "male", 32, 7, "yes", 2, 18, 5, 5),  
      (0, "female", 27, 1.5, "no", 4, 17, 1, 3),  
      (0, "male", 22, 1.5, "no", 4, 14, 5, 5),  
      (0, "female", 22, 1.5, "yes", 4, 14, 5, 4),  
      (0, "female", 32, 7, "yes", 3, 16, 1, 5),  
      (0, "female", 47, 15, "yes", 3, 16, 5, 4),  
      (0, "female", 22, 0.75, "no", 3, 16, 1, 5),  
      (0, "female", 22, 1.5, "yes", 2, 14, 5, 5),  
      (0, "female", 27, 4, "yes", 1, 16, 5, 5),  
      (0, "male", 52, 15, "yes", 4, 16, 5, 5),  
      (0, "male", 32, 10, "yes", 4, 20, 6, 5),  
      (0, "male", 47, 15, "yes", 4, 16, 6, 4),  
      (0, "female", 27, 7, "yes", 2, 14, 1, 2),  
      (0, "female", 22, 1.5, "no", 4, 14, 4, 5),  
      (0, "female", 32, 10, "yes", 2, 16, 5, 4),  
      (0, "female", 22, 0.75, "no", 2, 16, 5, 4),  
      (0, "female", 22, 1.5, "no", 2, 16, 5, 5),  
      (0, "female", 42, 15, "yes", 3, 18, 6, 4),  
      (0, "female", 27, 7, "yes", 5, 14, 4, 5),  
      (0, "male", 42, 15, "yes", 4, 16, 4, 4),  
      (0, "female", 57, 15, "yes", 3, 18, 5, 2),  
      (0, "male", 42, 15, "yes", 3, 18, 6, 2),  
      (0, "female", 32, 7, "yes", 2, 14, 1, 2),  
      (0, "male", 22, 4, "no", 5, 12, 4, 5),  
      (0, "female", 22, 1.5, "no", 1, 16, 6, 5),  
      (0, "female", 22, 0.75, "no", 1, 14, 4, 5),  
      (0, "female", 32, 15, "yes", 4, 12, 1, 5),  
      (0, "male", 22, 1.5, "no", 2, 18, 5, 3),  
      (0, "male", 27, 4, "yes", 5, 17, 2, 5),  
      (0, "female", 27, 4, "yes", 4, 12, 1, 5),  
      (0, "male", 42, 15, "yes", 5, 18, 5, 4),  
      (0, "male", 32, 1.5, "no", 2, 20, 7, 3),  
      (0, "male", 57, 15, "no", 4, 9, 3, 1),  
      (0, "male", 37, 7, "no", 4, 18, 5, 5),  
      (0, "male", 52, 15, "yes", 2, 17, 5, 4),  
      (0, "male", 47, 15, "yes", 4, 17, 6, 5),  
      (0, "female", 27, 7, "no", 2, 17, 5, 4),  
      (0, "female", 27, 7, "yes", 4, 14, 5, 5),  
      (0, "female", 22, 4, "no", 2, 14, 3, 3),  
      (0, "male", 37, 7, "yes", 2, 20, 6, 5),  
      (0, "male", 27, 7, "no", 4, 12, 4, 3),  
      (0, "male", 42, 10, "yes", 4, 18, 6, 4),  
      (0, "female", 22, 1.5, "no", 3, 14, 1, 5),  
      (0, "female", 22, 4, "yes", 2, 14, 1, 3),  
      (0, "female", 57, 15, "no", 4, 20, 6, 5),  
      (0, "male", 37, 15, "yes", 4, 14, 4, 3),  
      (0, "female", 27, 7, "yes", 3, 18, 5, 5),  
      (0, "female", 17.5, 10, "no", 4, 14, 4, 5),  
      (0, "male", 22, 4, "yes", 4, 16, 5, 5),  
      (0, "female", 27, 4, "yes", 2, 16, 1, 4),  
      (0, "female", 37, 15, "yes", 2, 14, 5, 1),  
      (0, "female", 22, 1.5, "no", 5, 14, 1, 4),  
      (0, "male", 27, 7, "yes", 2, 20, 5, 4),  
      (0, "male", 27, 4, "yes", 4, 14, 5, 5),  
      (0, "male", 22, 0.125, "no", 1, 16, 3, 5),  
      (0, "female", 27, 7, "yes", 4, 14, 1, 4),  
      (0, "female", 32, 15, "yes", 5, 16, 5, 3),  
      (0, "male", 32, 10, "yes", 4, 18, 5, 4),  
      (0, "female", 32, 15, "yes", 2, 14, 3, 4),  
      (0, "female", 22, 1.5, "no", 3, 17, 5, 5),  
      (0, "male", 27, 4, "yes", 4, 17, 4, 4),  
      (0, "female", 52, 15, "yes", 5, 14, 1, 5),  
      (0, "female", 27, 7, "yes", 2, 12, 1, 2),  
      (0, "female", 27, 7, "yes", 3, 12, 1, 4),  
      (0, "female", 42, 15, "yes", 2, 14, 1, 4),  
      (0, "female", 42, 15, "yes", 4, 14, 5, 4),  
      (0, "male", 27, 7, "yes", 4, 14, 3, 3),  
      (0, "male", 27, 7, "yes", 2, 20, 6, 2),  
      (0, "female", 42, 15, "yes", 3, 12, 3, 3),  
      (0, "male", 27, 4, "yes", 3, 16, 3, 5),  
      (0, "female", 27, 7, "yes", 3, 14, 1, 4),  
      (0, "female", 22, 1.5, "no", 2, 14, 4, 5),  
      (0, "female", 27, 4, "yes", 4, 14, 1, 4),  
      (0, "female", 22, 4, "no", 4, 14, 5, 5),  
      (0, "female", 22, 1.5, "no", 2, 16, 4, 5),  
      (0, "male", 47, 15, "no", 4, 14, 5, 4),  
      (0, "male", 37, 10, "yes", 2, 18, 6, 2),  
      (0, "male", 37, 15, "yes", 3, 17, 5, 4),  
      (0, "female", 27, 4, "yes", 2, 16, 1, 4),  
      (3, "male", 27, 1.5, "no", 3, 18, 4, 4),  
      (3, "female", 27, 4, "yes", 3, 17, 1, 5),  
      (7, "male", 37, 15, "yes", 5, 18, 6, 2),  
      (12, "female", 32, 10, "yes", 3, 17, 5, 2),  
      (1, "male", 22, 0.125, "no", 4, 16, 5, 5),  
      (1, "female", 22, 1.5, "yes", 2, 14, 1, 5),  
      (12, "male", 37, 15, "yes", 4, 14, 5, 2),  
      (7, "female", 22, 1.5, "no", 2, 14, 3, 4),  
      (2, "male", 37, 15, "yes", 2, 18, 6, 4),  
      (3, "female", 32, 15, "yes", 4, 12, 3, 2),  
      (1, "female", 37, 15, "yes", 4, 14, 4, 2),  
      (7, "female", 42, 15, "yes", 3, 17, 1, 4),  
      (12, "female", 42, 15, "yes", 5, 9, 4, 1),  
      (12, "male", 37, 10, "yes", 2, 20, 6, 2),  
      (12, "female", 32, 15, "yes", 3, 14, 1, 2),  
      (3, "male", 27, 4, "no", 1, 18, 6, 5),  
      (7, "male", 37, 10, "yes", 2, 18, 7, 3),  
      (7, "female", 27, 4, "no", 3, 17, 5, 5),  
      (1, "male", 42, 15, "yes", 4, 16, 5, 5),  
      (1, "female", 47, 15, "yes", 5, 14, 4, 5),  
      (7, "female", 27, 4, "yes", 3, 18, 5, 4),  
      (1, "female", 27, 7, "yes", 5, 14, 1, 4),  
      (12, "male", 27, 1.5, "yes", 3, 17, 5, 4),  
      (12, "female", 27, 7, "yes", 4, 14, 6, 2),  
      (3, "female", 42, 15, "yes", 4, 16, 5, 4),  
      (7, "female", 27, 10, "yes", 4, 12, 7, 3),  
      (1, "male", 27, 1.5, "no", 2, 18, 5, 2),  
      (1, "male", 32, 4, "no", 4, 20, 6, 4),  
      (1, "female", 27, 7, "yes", 3, 14, 1, 3),  
      (3, "female", 32, 10, "yes", 4, 14, 1, 4),  
      (3, "male", 27, 4, "yes", 2, 18, 7, 2),  
      (1, "female", 17.5, 0.75, "no", 5, 14, 4, 5),  
      (1, "female", 32, 10, "yes", 4, 18, 1, 5),  
      (7, "female", 32, 7, "yes", 2, 17, 6, 4),  
      (7, "male", 37, 15, "yes", 2, 20, 6, 4),  
      (7, "female", 37, 10, "no", 1, 20, 5, 3),  
      (12, "female", 32, 10, "yes", 2, 16, 5, 5),  
      (7, "male", 52, 15, "yes", 2, 20, 6, 4),  
      (7, "female", 42, 15, "yes", 1, 12, 1, 3),  
      (1, "male", 52, 15, "yes", 2, 20, 6, 3),  
      (2, "male", 37, 15, "yes", 3, 18, 6, 5),  
      (12, "female", 22, 4, "no", 3, 12, 3, 4),  
      (12, "male", 27, 7, "yes", 1, 18, 6, 2),  
      (1, "male", 27, 4, "yes", 3, 18, 5, 5),  
      (12, "male", 47, 15, "yes", 4, 17, 6, 5),  
      (12, "female", 42, 15, "yes", 4, 12, 1, 1),  
      (7, "male", 27, 4, "no", 3, 14, 3, 4),  
      (7, "female", 32, 7, "yes", 4, 18, 4, 5),  
      (1, "male", 32, 0.417, "yes", 3, 12, 3, 4),  
      (3, "male", 47, 15, "yes", 5, 16, 5, 4),  
      (12, "male", 37, 15, "yes", 2, 20, 5, 4),  
      (7, "male", 22, 4, "yes", 2, 17, 6, 4),  
      (1, "male", 27, 4, "no", 2, 14, 4, 5),  
      (7, "female", 52, 15, "yes", 5, 16, 1, 3),  
      (1, "male", 27, 4, "no", 3, 14, 3, 3),  
      (1, "female", 27, 10, "yes", 4, 16, 1, 4),  
      (1, "male", 32, 7, "yes", 3, 14, 7, 4),  
      (7, "male", 32, 7, "yes", 2, 18, 4, 1),  
      (3, "male", 22, 1.5, "no", 1, 14, 3, 2),  
      (7, "male", 22, 4, "yes", 3, 18, 6, 4),  
      (7, "male", 42, 15, "yes", 4, 20, 6, 4),  
      (2, "female", 57, 15, "yes", 1, 18, 5, 4),  
      (7, "female", 32, 4, "yes", 3, 18, 5, 2),  
      (1, "male", 27, 4, "yes", 1, 16, 4, 4),  
      (7, "male", 32, 7, "yes", 4, 16, 1, 4),  
      (2, "male", 57, 15, "yes", 1, 17, 4, 4),  
      (7, "female", 42, 15, "yes", 4, 14, 5, 2),  
      (7, "male", 37, 10, "yes", 1, 18, 5, 3),  
      (3, "male", 42, 15, "yes", 3, 17, 6, 1),  
      (1, "female", 52, 15, "yes", 3, 14, 4, 4),  
      (2, "female", 27, 7, "yes", 3, 17, 5, 3),  
      (12, "male", 32, 7, "yes", 2, 12, 4, 2),  
      (1, "male", 22, 4, "no", 4, 14, 2, 5),  
      (3, "male", 27, 7, "yes", 3, 18, 6, 4),  
      (12, "female", 37, 15, "yes", 1, 18, 5, 5),  
      (7, "female", 32, 15, "yes", 3, 17, 1, 3),  
      (7, "female", 27, 7, "no", 2, 17, 5, 5),  
      (1, "female", 32, 7, "yes", 3, 17, 5, 3),  
      (1, "male", 32, 1.5, "yes", 2, 14, 2, 4),  
      (12, "female", 42, 15, "yes", 4, 14, 1, 2),  
      (7, "male", 32, 10, "yes", 3, 14, 5, 4),  
      (7, "male", 37, 4, "yes", 1, 20, 6, 3),  
      (1, "female", 27, 4, "yes", 2, 16, 5, 3),  
      (12, "female", 42, 15, "yes", 3, 14, 4, 3),  
      (1, "male", 27, 10, "yes", 5, 20, 6, 5),  
      (12, "male", 37, 10, "yes", 2, 20, 6, 2),  
      (12, "female", 27, 7, "yes", 1, 14, 3, 3),  
      (3, "female", 27, 7, "yes", 4, 12, 1, 2),  
      (3, "male", 32, 10, "yes", 2, 14, 4, 4),  
      (12, "female", 17.5, 0.75, "yes", 2, 12, 1, 3),  
      (12, "female", 32, 15, "yes", 3, 18, 5, 4),  
      (2, "female", 22, 7, "no", 4, 14, 4, 3),  
      (1, "male", 32, 7, "yes", 4, 20, 6, 5),  
      (7, "male", 27, 4, "yes", 2, 18, 6, 2),  
      (1, "female", 22, 1.5, "yes", 5, 14, 5, 3),  
      (12, "female", 32, 15, "no", 3, 17, 5, 1),  
      (12, "female", 42, 15, "yes", 2, 12, 1, 2),  
      (7, "male", 42, 15, "yes", 3, 20, 5, 4),  
      (12, "male", 32, 10, "no", 2, 18, 4, 2),  
      (12, "female", 32, 15, "yes", 3, 9, 1, 1),  
      (7, "male", 57, 15, "yes", 5, 20, 4, 5),  
      (12, "male", 47, 15, "yes", 4, 20, 6, 4),  
      (2, "female", 42, 15, "yes", 2, 17, 6, 3),  
      (12, "male", 37, 15, "yes", 3, 17, 6, 3),  
      (12, "male", 37, 15, "yes", 5, 17, 5, 2),  
      (7, "male", 27, 10, "yes", 2, 20, 6, 4),  
      (2, "male", 37, 15, "yes", 2, 16, 5, 4),  
      (12, "female", 32, 15, "yes", 1, 14, 5, 2),  
      (7, "male", 32, 10, "yes", 3, 17, 6, 3),  
      (2, "male", 37, 15, "yes", 4, 18, 5, 1),  
      (7, "female", 27, 1.5, "no", 2, 17, 5, 5),  
      (3, "female", 47, 15, "yes", 2, 17, 5, 2),  
      (12, "male", 37, 15, "yes", 2, 17, 5, 4),  
      (12, "female", 27, 4, "no", 2, 14, 5, 5),  
      (2, "female", 27, 10, "yes", 4, 14, 1, 5),  
      (1, "female", 22, 4, "yes", 3, 16, 1, 3),  
      (12, "male", 52, 7, "no", 4, 16, 5, 5),  
      (2, "female", 27, 4, "yes", 1, 16, 3, 5),  
      (7, "female", 37, 15, "yes", 2, 17, 6, 4),  
      (2, "female", 27, 4, "no", 1, 17, 3, 1),  
      (12, "female", 17.5, 0.75, "yes", 2, 12, 3, 5),  
      (7, "female", 32, 15, "yes", 5, 18, 5, 4),  
      (7, "female", 22, 4, "no", 1, 16, 3, 5),  
      (2, "male", 32, 4, "yes", 4, 18, 6, 4),  
      (1, "female", 22, 1.5, "yes", 3, 18, 5, 2),  
      (3, "female", 42, 15, "yes", 2, 17, 5, 4),  
      (1, "male", 32, 7, "yes", 4, 16, 4, 4),  
      (12, "male", 37, 15, "no", 3, 14, 6, 2),  
      (1, "male", 42, 15, "yes", 3, 16, 6, 3),  
      (1, "male", 27, 4, "yes", 1, 18, 5, 4),  
      (2, "male", 37, 15, "yes", 4, 20, 7, 3),  
      (7, "male", 37, 15, "yes", 3, 20, 6, 4),  
      (3, "male", 22, 1.5, "no", 2, 12, 3, 3),  
      (3, "male", 32, 4, "yes", 3, 20, 6, 2),  
      (2, "male", 32, 15, "yes", 5, 20, 6, 5),  
      (12, "female", 52, 15, "yes", 1, 18, 5, 5),  
      (12, "male", 47, 15, "no", 1, 18, 6, 5),  
      (3, "female", 32, 15, "yes", 4, 16, 4, 4),  
      (7, "female", 32, 15, "yes", 3, 14, 3, 2),  
      (7, "female", 27, 7, "yes", 4, 16, 1, 2),  
      (12, "male", 42, 15, "yes", 3, 18, 6, 2),  
      (7, "female", 42, 15, "yes", 2, 14, 3, 2),  
      (12, "male", 27, 7, "yes", 2, 17, 5, 4),  
      (3, "male", 32, 10, "yes", 4, 14, 4, 3),  
      (7, "male", 47, 15, "yes", 3, 16, 4, 2),  
      (1, "male", 22, 1.5, "yes", 1, 12, 2, 5),  
      (7, "female", 32, 10, "yes", 2, 18, 5, 4),  
      (2, "male", 32, 10, "yes", 2, 17, 6, 5),  
      (2, "male", 22, 7, "yes", 3, 18, 6, 2),  
      (1, "female", 32, 15, "yes", 3, 14, 1, 5))
	  
val colArray1: Array[String] = Array("affairs", "gender", "age", "yearsmarried", "children", "religiousness", "education", "occupation", "rating")

val data = dataList.toDF(colArray1: _*)

 

逻辑回归建模

data.createOrReplaceTempView("df")

val affairs = "case when affairs>0 then 1 else 0 end as affairs,"
val gender = "case when gender='female' then 0 else 1 end as gender,"
val children = "case when children='yes' then 1 else 0 end as children,"

val sqlDF = spark.sql("select " +
  affairs +
  gender +
  "age,yearsmarried," +
  children +
  "religiousness,education,occupation,rating" +
  " from df ")
sqlDF.show()

val colArray2 = Array("gender", "age", "yearsmarried", "children", "religiousness", "education", "occupation", "rating")

val vecDF: DataFrame = new VectorAssembler().setInputCols(colArray2).setOutputCol("features").transform(sqlDF)

val Array(trainingDF, testDF) = vecDF.randomSplit(Array(0.9, 0.1), seed = 12345)

val lrModel = new LogisticRegression().setLabelCol("affairs").setFeaturesCol("features").fit(trainingDF)

// 输出逻辑回归的系数和截距
println(s"Coefficients: ${lrModel.coefficients} Intercept: ${lrModel.intercept}")


// 设置ElasticNet混合参数,范围为[0,1]。
// 对于α= 0,惩罚是L2惩罚。 对于alpha = 1,它是一个L1惩罚。 对于0 <α<1,惩罚是L1和L2的组合。 默认值为0.0,这是一个L2惩罚。
lrModel.getElasticNetParam 
lrModel.getRegParam  // 正则化参数>=0
lrModel.getStandardization  // 在拟合模型之前,是否标准化特征
// 在二进制分类中设置阈值,范围为[0,1]。如果类标签1的估计概率>Threshold,则预测1,否则0.高阈值鼓励模型更频繁地预测0; 低阈值鼓励模型更频繁地预测1。默认值为0.5。
lrModel.getThreshold
// 设置迭代的收敛容限。 较小的值将导致更高的精度与更多的迭代的成本。 默认值为1E-6。
lrModel.getTol
lrModel.getMaxIter

lrModel.transform(testDF).select("features","rawPrediction","probability","prediction").show(30,false)

// Extract the summary from the returned LogisticRegressionModel instance trained in the earlier
// example
val trainingSummary = lrModel.summary

// Obtain the objective per iteration.
val objectiveHistory = trainingSummary.objectiveHistory
objectiveHistory.foreach(loss => println(loss))

 

代码执行结果

sqlDF.show()
+-------+------+----+------------+--------+-------------+---------+----------+------+
|affairs|gender| age|yearsmarried|children|religiousness|education|occupation|rating|
+-------+------+----+------------+--------+-------------+---------+----------+------+
|      0|     1|37.0|        10.0|       0|          3.0|     18.0|       7.0|   4.0|
|      0|     0|27.0|         4.0|       0|          4.0|     14.0|       6.0|   4.0|
|      0|     0|32.0|        15.0|       1|          1.0|     12.0|       1.0|   4.0|
|      0|     1|57.0|        15.0|       1|          5.0|     18.0|       6.0|   5.0|
|      0|     1|22.0|        0.75|       0|          2.0|     17.0|       6.0|   3.0|
|      0|     0|32.0|         1.5|       0|          2.0|     17.0|       5.0|   5.0|
|      0|     0|22.0|        0.75|       0|          2.0|     12.0|       1.0|   3.0|
|      0|     1|57.0|        15.0|       1|          2.0|     14.0|       4.0|   4.0|
|      0|     0|32.0|        15.0|       1|          4.0|     16.0|       1.0|   2.0|
|      0|     1|22.0|         1.5|       0|          4.0|     14.0|       4.0|   5.0|
|      0|     1|37.0|        15.0|       1|          2.0|     20.0|       7.0|   2.0|
|      0|     1|27.0|         4.0|       1|          4.0|     18.0|       6.0|   4.0|
|      0|     1|47.0|        15.0|       1|          5.0|     17.0|       6.0|   4.0|
|      0|     0|22.0|         1.5|       0|          2.0|     17.0|       5.0|   4.0|
|      0|     0|27.0|         4.0|       0|          4.0|     14.0|       5.0|   4.0|
|      0|     0|37.0|        15.0|       1|          1.0|     17.0|       5.0|   5.0|
|      0|     0|37.0|        15.0|       1|          2.0|     18.0|       4.0|   3.0|
|      0|     0|22.0|        0.75|       0|          3.0|     16.0|       5.0|   4.0|
|      0|     0|22.0|         1.5|       0|          2.0|     16.0|       5.0|   5.0|
|      0|     0|27.0|        10.0|       1|          2.0|     14.0|       1.0|   5.0|
+-------+------+----+------------+--------+-------------+---------+----------+------+
only showing top 20 rows

val colArray2 = Array("gender", "age", "yearsmarried", "children", "religiousness", "education", "occupation", "rating")
colArray2: Array[String] = Array(gender, age, yearsmarried, children, religiousness, education, occupation, rating)

val vecDF: DataFrame = new VectorAssembler().setInputCols(colArray2).setOutputCol("features").transform(sqlDF)
vecDF: org.apache.spark.sql.DataFrame = [affairs: int, gender: int ... 8 more fields]


val Array(trainingDF, testDF) = vecDF.randomSplit(Array(0.9, 0.1), seed = 12345)
trainingDF: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [affairs: int, gender: int ... 8 more fields]
testDF: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [affairs: int, gender: int ... 8 more fields]

val lrModel = new LogisticRegression().setLabelCol("affairs").setFeaturesCol("features").fit(trainingDF)
lrModel: org.apache.spark.ml.classification.LogisticRegressionModel = logreg_9d8a91cb1a0b


// 输出逻辑回归的系数和截距
println(s"Coefficients: ${lrModel.coefficients} Intercept: ${lrModel.intercept}")
Coefficients: [0.308688148697453,-0.04150802586369178,0.08771801000466706,0.6896853841812993,-0.3425440049065515,0.008629892776596084,0.0458687806620022,-0.46268114569065383] Intercept: 1.263
200227888706
 

// 设置ElasticNet混合参数,范围为[0,1]。
// 对于α= 0,惩罚是L2惩罚。 对于alpha = 1,它是一个L1惩罚。 对于0 <α<1,惩罚是L1和L2的组合。 默认值为0.0,这是一个L2惩罚。
lrModel.getElasticNetParam 
res5: Double = 0.0

lrModel.getRegParam  // 正则化参数>=0
res6: Double = 0.0

lrModel.getStandardization  // 在拟合模型之前,是否标准化特征
res7: Boolean = true

// 在二进制分类中设置阈值,范围为[0,1]。如果类标签1的估计概率>Threshold,则预测1,否则0.高阈值鼓励模型更频繁地预测0; 低阈值鼓励模型更频繁地预测1。默认值为0.5。
lrModel.getThreshold
res8: Double = 0.5

// 设置迭代的收敛容限。 较小的值将导致更高的精度与更多的迭代的成本。 默认值为1E-6。
lrModel.getTol
res9: Double = 1.0E-6


lrModel.transform(testDF).show
+-------+------+----+------------+--------+-------------+---------+----------+------+--------------------+--------------------+--------------------+----------+
|affairs|gender| age|yearsmarried|children|religiousness|education|occupation|rating|            features|       rawPrediction|         probability|prediction|
+-------+------+----+------------+--------+-------------+---------+----------+------+--------------------+--------------------+--------------------+----------+
|      0|     0|22.0|       0.125|       0|          4.0|     14.0|       4.0|   5.0|[0.0,22.0,0.125,0...|[3.01829971642105...|[0.95339403355398...|       0.0|
|      0|     0|22.0|       0.417|       1|          3.0|     14.0|       3.0|   5.0|[0.0,22.0,0.417,1...|[2.00632544907384...|[0.88145961149358...|       0.0|
|      0|     0|27.0|         1.5|       0|          2.0|     16.0|       6.0|   5.0|[0.0,27.0,1.5,0.0...|[2.31114222529279...|[0.90979563879849...|       0.0|
|      0|     0|27.0|         4.0|       1|          3.0|     18.0|       4.0|   5.0|[0.0,27.0,4.0,1.0...|[1.81918359677719...|[0.86046813628746...|       0.0|
|      0|     0|27.0|         7.0|       1|          2.0|     18.0|       1.0|   5.0|[0.0,27.0,7.0,1.0...|[1.35109190384264...|[0.79430808378365...|       0.0|
|      0|     0|27.0|         7.0|       1|          3.0|     16.0|       1.0|   4.0|[0.0,27.0,7.0,1.0...|[1.24821454861173...|[0.77699063797650...|       0.0|
|      0|     0|27.0|        10.0|       1|          2.0|     12.0|       1.0|   4.0|[0.0,27.0,10.0,1....|[0.67703608479756...|[0.66307686153089...|       0.0|
|      0|     0|32.0|        10.0|       1|          4.0|     17.0|       5.0|   4.0|[0.0,32.0,10.0,1....|[1.34303963739813...|[0.79298936429536...|       0.0|
|      0|     0|32.0|        10.0|       1|          5.0|     14.0|       4.0|   5.0|[0.0,32.0,10.0,1....|[2.22002324698713...|[0.90203325004083...|       0.0|
|      0|     0|32.0|        15.0|       1|          3.0|     18.0|       5.0|   4.0|[0.0,32.0,15.0,1....|[0.55327568969165...|[0.63489524159656...|       0.0|
|      0|     0|37.0|        15.0|       1|          4.0|     17.0|       1.0|   5.0|[0.0,37.0,15.0,1....|[1.75814598503192...|[0.85297730582863...|       0.0|
|      0|     0|52.0|        15.0|       1|          5.0|      9.0|       5.0|   5.0|[0.0,52.0,15.0,1....|[2.60887439745861...|[0.93143054154558...|       0.0|
|      0|     0|52.0|        15.0|       1|          5.0|     12.0|       1.0|   3.0|[0.0,52.0,15.0,1....|[1.84109755039552...|[0.86307846107252...|       0.0|
|      0|     0|57.0|        15.0|       1|          4.0|     16.0|       6.0|   4.0|[0.0,57.0,15.0,1....|[1.90491134608169...|[0.87044638395268...|       0.0|
|      0|     1|22.0|         4.0|       0|          1.0|     18.0|       5.0|   5.0|[1.0,22.0,4.0,0.0...|[1.26168391246747...|[0.77931584772929...|       0.0|
|      0|     1|22.0|         4.0|       0|          2.0|     18.0|       5.0|   5.0|[1.0,22.0,4.0,0.0...|[1.60422791737402...|[0.83260846569570...|       0.0|
|      0|     1|27.0|         4.0|       1|          3.0|     16.0|       5.0|   5.0|[1.0,27.0,4.0,1.0...|[1.48188645297092...|[0.81485734920851...|       0.0|
|      0|     1|27.0|         4.0|       1|          4.0|     14.0|       5.0|   4.0|[1.0,27.0,4.0,1.0...|[1.37900909774001...|[0.79883180985416...|       0.0|
|      0|     1|32.0|       0.125|       1|          2.0|     18.0|       5.0|   2.0|[1.0,32.0,0.125,1...|[0.28148664352576...|[0.56991065665974...|       0.0|
|      0|     1|32.0|        10.0|       1|          2.0|     20.0|       6.0|   3.0|[1.0,32.0,10.0,1....|[-0.1851761257948...|[0.45383780246566...|       1.0|
+-------+------+----+------------+--------+-------------+---------+----------+------+--------------------+--------------------+--------------------+----------+
only showing top 20 rows



// Extract the summary from the returned LogisticRegressionModel instance trained in the earlier
// example
val trainingSummary = lrModel.summary
trainingSummary: org.apache.spark.ml.classification.LogisticRegressionTrainingSummary = org.apache.spark.ml.classification.BinaryLogisticRegressionTrainingSummary@4cde233d


// Obtain the objective per iteration.
val objectiveHistory = trainingSummary.objectiveHistory
objectiveHistory: Array[Double] = Array(0.5613118243072733, 0.5564125149222438, 0.5365395467216898, 0.5160918427628939, 0.51304621799159, 0.5105231964507352, 0.5079869547558363, 0.50728888730
31864, 0.5067113660796532, 0.506520677080951, 0.5059147658563949, 0.5053652033316485, 0.5047266888422277, 0.5045473900598205, 0.5041496504941453, 0.5034630545828777, 0.5025745763542784, 0.5019910559468922, 0.5012033102192196, 0.5009489760675826, 0.5008431925740259, 0.5008297629370251, 0.5008258245513862, 0.5008137617093257, 0.5008136785235711, 0.5008130045533166, 0.5008129888367148, 0.5008129675120628, 0.5008129469652479, 0.5008129168191972, 0.5008129132692991, 0.5008129124596163, 0.5008129124081014, 0.500812912251931, 0.5008129121356268)
objectiveHistory.foreach(loss => println(loss))
0.5613118243072733
0.5564125149222438
0.5365395467216898
0.5160918427628939
0.51304621799159
0.5105231964507352
0.5079869547558363
0.5072888873031864
0.5067113660796532
0.506520677080951
0.5059147658563949
0.5053652033316485
0.5047266888422277
0.5045473900598205
0.5041496504941453
0.5034630545828777
0.5025745763542784
0.5019910559468922
0.5012033102192196
0.5009489760675826
0.5008431925740259
0.5008297629370251
0.5008258245513862
0.5008137617093257
0.5008136785235711
0.5008130045533166
0.5008129888367148
0.5008129675120628
0.5008129469652479
0.5008129168191972
0.5008129132692991
0.5008129124596163
0.5008129124081014
0.500812912251931
0.5008129121356268


 lrModel.transform(testDF).select("features","rawPrediction","probability","prediction").show(30,false)
+-------------------------------------+--------------------------------------------+----------------------------------------+----------+
|features                             |rawPrediction                               |probability                             |prediction|
+-------------------------------------+--------------------------------------------+----------------------------------------+----------+
|[0.0,22.0,0.125,0.0,4.0,14.0,4.0,5.0]|[3.0182997164210517,-3.0182997164210517]    |[0.9533940335539883,0.04660596644601167]|0.0       |
|[0.0,22.0,0.417,1.0,3.0,14.0,3.0,5.0]|[2.00632544907384,-2.00632544907384]        |[0.8814596114935873,0.11854038850641263]|0.0       |
|[0.0,27.0,1.5,0.0,2.0,16.0,6.0,5.0]  |[2.311142225292793,-2.311142225292793]      |[0.9097956387984996,0.09020436120150035]|0.0       |
|[0.0,27.0,4.0,1.0,3.0,18.0,4.0,5.0]  |[1.81918359677719,-1.81918359677719]        |[0.8604681362874618,0.13953186371253828]|0.0       |
|[0.0,27.0,7.0,1.0,2.0,18.0,1.0,5.0]  |[1.351091903842644,-1.351091903842644]      |[0.7943080837836515,0.20569191621634847]|0.0       |
|[0.0,27.0,7.0,1.0,3.0,16.0,1.0,4.0]  |[1.2482145486117338,-1.2482145486117338]    |[0.7769906379765039,0.2230093620234961] |0.0       |
|[0.0,27.0,10.0,1.0,2.0,12.0,1.0,4.0] |[0.6770360847975654,-0.6770360847975654]    |[0.6630768615308953,0.33692313846910465]|0.0       |
|[0.0,32.0,10.0,1.0,4.0,17.0,5.0,4.0] |[1.343039637398138,-1.343039637398138]      |[0.7929893642953615,0.20701063570463848]|0.0       |
|[0.0,32.0,10.0,1.0,5.0,14.0,4.0,5.0] |[2.220023246987134,-2.220023246987134]      |[0.9020332500408325,0.09796674995916752]|0.0       |
|[0.0,32.0,15.0,1.0,3.0,18.0,5.0,4.0] |[0.5532756896916551,-0.5532756896916551]    |[0.6348952415965647,0.3651047584034352] |0.0       |
|[0.0,37.0,15.0,1.0,4.0,17.0,1.0,5.0] |[1.7581459850319243,-1.7581459850319243]    |[0.8529773058286395,0.14702269417136052]|0.0       |
|[0.0,52.0,15.0,1.0,5.0,9.0,5.0,5.0]  |[2.6088743974586124,-2.6088743974586124]    |[0.9314305415455806,0.06856945845441945]|0.0       |
|[0.0,52.0,15.0,1.0,5.0,12.0,1.0,3.0] |[1.8410975503955256,-1.8410975503955256]    |[0.8630784610725231,0.13692153892747697]|0.0       |
|[0.0,57.0,15.0,1.0,4.0,16.0,6.0,4.0] |[1.904911346081691,-1.904911346081691]      |[0.8704463839526814,0.1295536160473186] |0.0       |
|[1.0,22.0,4.0,0.0,1.0,18.0,5.0,5.0]  |[1.2616839124674724,-1.2616839124674724]    |[0.7793158477292919,0.22068415227070803]|0.0       |
|[1.0,22.0,4.0,0.0,2.0,18.0,5.0,5.0]  |[1.6042279173740237,-1.6042279173740237]    |[0.832608465695705,0.16739153430429493] |0.0       |
|[1.0,27.0,4.0,1.0,3.0,16.0,5.0,5.0]  |[1.4818864529709268,-1.4818864529709268]    |[0.8148573492085158,0.1851426507914842] |0.0       |
|[1.0,27.0,4.0,1.0,4.0,14.0,5.0,4.0]  |[1.379009097740017,-1.379009097740017]      |[0.7988318098541624,0.2011681901458377] |0.0       |
|[1.0,32.0,0.125,1.0,2.0,18.0,5.0,2.0]|[0.28148664352576547,-0.28148664352576547]  |[0.569910656659749,0.430089343340251]   |0.0       |
|[1.0,32.0,10.0,1.0,2.0,20.0,6.0,3.0] |[-0.1851761257948623,0.1851761257948623]    |[0.45383780246566996,0.5461621975343299]|1.0       |
|[1.0,32.0,10.0,1.0,4.0,20.0,6.0,4.0] |[0.9625930297088949,-0.9625930297088949]    |[0.7236406723848533,0.2763593276151468] |0.0       |
|[1.0,32.0,15.0,1.0,1.0,16.0,5.0,5.0] |[0.039440462424945366,-0.039440462424945366]|[0.5098588376463971,0.4901411623536029] |0.0       |
|[1.0,37.0,4.0,1.0,1.0,18.0,5.0,4.0]  |[0.7319377705508958,-0.7319377705508958]    |[0.6752303588678488,0.3247696411321513] |0.0       |
|[1.0,37.0,15.0,1.0,5.0,20.0,5.0,4.0] |[1.119955894572572,-1.119955894572572]      |[0.7539805352533917,0.24601946474660835]|0.0       |
|[1.0,42.0,15.0,1.0,4.0,17.0,6.0,5.0] |[1.4276540623429193,-1.4276540623429193]    |[0.8065355283195409,0.19346447168045908]|0.0       |
|[1.0,42.0,15.0,1.0,4.0,20.0,4.0,5.0] |[1.4935019453371354,-1.4935019453371354]    |[0.8166033137058254,0.1833966862941747] |0.0       |
|[1.0,42.0,15.0,1.0,4.0,20.0,6.0,3.0] |[0.4764020926318233,-0.4764020926318233]    |[0.6168979221749373,0.38310207782506256]|0.0       |
|[1.0,57.0,15.0,1.0,2.0,14.0,4.0,4.0] |[1.0201325344483316,-1.0201325344483316]    |[0.734998414766428,0.265001585233572]   |0.0       |
|[1.0,57.0,15.0,1.0,2.0,14.0,7.0,2.0] |[-0.04283609891898266,0.04283609891898266]  |[0.48929261249695394,0.5107073875030461]|1.0       |
|[1.0,57.0,15.0,1.0,5.0,20.0,5.0,3.0] |[1.4874352661557535,-1.4874352661557535]    |[0.8156930079647114,0.18430699203528864]|0.0       |
+-------------------------------------+--------------------------------------------+----------------------------------------+----------+
only showing top 30 rows

 

posted @ 2016-12-27 09:23  智能先行者  阅读(11624)  评论(6编辑  收藏  举报