spark之MLlib机器学习-线性回归

此篇博文根据《Spark MLlib机器学习》实例程序编写,可作为熟悉scala和mllib编写机器学习算法的一种实践。
1、准备测试数据
可从作者博客自行下载。代码及数据下载地址
2、编写scala源码
为了进一步熟悉scala编程语言,建议自己把代码敲一次。

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

object LinearRegression{

  def main(args:Array[String]){

    val conf = new SparkConf().setAppName("LinearRegressionWithSGD")
    val sc =new SparkContext(conf)
  //  Logger.getRootLogger.setLevel(Level.WARN)

    val data_path1="file:///usr/spark2.0/data/mllib/mydata/lpsa.data"
    val data=sc.textFile(data_path1)
    val examples=data.map{line=>
     val parts=line.split(',')
     LabeledPoint(parts(0).toDouble,Vectors.dense(parts(1).split(' ').map(_.toDouble)))
    }.cache()

    val numExamples=examples.count()
    val numIterations=100
    val stepSize=1
    val miniBatchFraction=1.0
    val model=LinearRegressionWithSGD.train(examples,numIterations,stepSize,miniBatchFraction)
    val prediction=model.predict(examples.map(_.features))
    val predictionAndLabel=prediction.zip(examples.map(_.label))
    val print_predict=predictionAndLabel.take(50)
    println("prediction"+"\t"+"label")
    for (i <- 0 to print_predict.length-1 ){
       println(print_predict(i)._1 + "\t" + print_predict(i)._2)
    }
    val loss =predictionAndLabel.map{
        case(p,_)=>
            val err = p - 1
            err*err
    }.reduce(_+_)
    val rmse=math.sqrt(loss/numExamples)
    println(s"Test RMSE = $rmse.")

  }

3、使用sbt工具编译和打包

4、结果输出:
这里写图片描述

可以看出,线性拟合的结果并不理想,说明模型选择的不合理。本示例仅仅为了说明线性回归api的用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值