SparkML实战之一:线性回归

本文介绍如何利用Apache Spark库实现线性回归模型的训练与模型评估过程,包括数据加载、特征处理、模型构建、参数优化以及误差计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package class8

import org.apache.log4j.{Logger, Level}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.{LinearRegressionWithSGD, LabeledPoint}

/**
 * Created by root on 16-1-12.
 */
object LinearRgression {
  def main(args: Array[String]) {
    // 屏蔽不必要的日志显示终端上
    Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
    Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
    // 设置运行环境
    val conf = new SparkConf().setAppName("LinearRegression").setMaster("local[4]")
    val sc = new SparkContext(conf)
    // Load and parse the data
    /*
    1 -0.4307829,-1.63735562648104 -2.00621178480549 -1.86242597251066 -1.02470580167082 -0.522940888712441 -0.86317118542594    5 -1.04215728919298 -0.864466507337306
    2 -0.1625189,-1.98898046126935 -0.722008756122123 -0.787896192088153 -1.02470580167082 -0.522940888712441 -0.863171185425    945 -1.04215728919298 -0.864466507337306
    */
    val data = sc.textFile("/usr/local/spark/spark-data/data/class8/lpsa.data")
    val parsedData = data.map { line =>
      val parts = line.split(',')
      //特征放入dense向量
      LabeledPoint(parts(0).toDouble, Vectors.dense(parts(1).split(' ').map(_.toDouble)))
  }
   //构建模型
    val numIterations = 100
    //参数估计最大似然用的比较多,这里采用随机梯度下降法
    //sgd解决了梯度下降的两个问题: 收敛速度慢和陷入局部最优
    val model = LinearRegressionWithSGD.train(parsedData,numIterations)
    //评估模型并计算误差
    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)}.reduce(_ + _)/valuesAndPreds.count()
    println("training Mean Squared Error = "+MSE)
    println(model.weights+"-------------")
    sc.stop()
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值