Spark中的Logistic回归用于预测分析

时间:2015-07-06 06:03:14

标签: scala csv apache-spark analytics regression

我是spark,big data和scala的初学者,我正在尝试使用示例数据集在Spark中构建预测模型。我想使用pySpark,但目前mysib for pyspark有限制,因为它没有保存和加载。我有几个问题:

  1. 我的数据采用csv格式,如下所示:

    Buy,Income,Is Female,Is Married,Has College,Is Professional,Is Retired,Unemployed,Residence Length,Dual Income,Minors,Own,House,White,English,Prev Child Mag,Prev Parent Mag
    0,24000,1,0,1,1,0,0,26,0,0,0,1,0,0,0,0
    1,75000,1,1,1,1,0,0,15,1,0,1,1,1,1,1,0
    
  2. 基本上,这些数据可以帮助预测用户是否根据所有给定的参数购买此杂志。

    如何将此数据转换为Spark易于解释的格式? (我在这里看到了关于将csv转换为RDD的其他相关答案,并尝试了它们,但它让我比以前更加困惑)

    1. 如果我只是运行mllib文档中给出的关于此数据的逻辑回归程序,其中部分数据用于培训,另一部分用于测试,如何将其转换为可演示的格式,我有一个新用户和程序引导我完成所有参数,到最后它给了我一个“是”或“否”关于这个新人是否会购买该杂志。

      import org.apache.spark.mllib.regression.LabeledPoint
      import org.apache.spark.mllib.regression.LinearRegressionModel
      import org.apache.spark.mllib.regression.LinearRegressionWithSGD
      import org.apache.spark.mllib.linalg.Vectors
      
      // Load and parse the data
      val data = sc.textFile("data/mllib/ridge-data/lpsa.data")
      val parsedData = data.map { line =>
        val parts = line.split(',')
        LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
      }.cache()
      
      // Building the model
      val numIterations = 100
      val model = LinearRegressionWithSGD.train(parsedData, numIterations)
      
      // Evaluate model on training examples and compute training error
      val valuesAndPreds = parsedData.map { point =>
        val prediction = model.predict(point.features)
        (point.label, prediction)
      }
      val MSE = valuesAndPreds.map{case(v, p) => math.pow((v - p), 2)}.mean()
      println("training Mean Squared Error = " + MSE)
      
      // Save and load model
      model.save(sc, "myModelPath")
      val sameModel = LinearRegressionModel.load(sc, "myModelPath")
      
    2. 如果我使用这个程序作为我的起点,基本上我从哪里开始?

1 个答案:

答案 0 :(得分:0)

拥有该模型可以预测输入数据是满足模型(1)还是不满足(0)。 为此:

    val yourInputData = //putYouDataHere
    val res = model.predict(Vectors.dense(yourInputData))
    println(res)

您传递给预测方法的向量应具有与用于构建模型的数据相同的维数:“data / mllib / ridge-data / lpsa.data”