1、随机梯度下降
首先介绍一下随机梯度下降算法:
1.1、代码一:
package mllib import org.apache.log4j.{Level, Logger} import org.apache.spark.{SparkContext, SparkConf} import scala.collection.mutable.HashMap /** * 随机梯度下降算法 * Created by 汪本成 on 2016/8/7. */ object SGD { //屏蔽不必要的日志显示在终端上 Logger.getLogger("org.apache.spark").setLevel(Level.WARN) Logger.getLogger("org.apache.eclipse.jetty.server").setLevel(Level.OFF) //程序入口 val conf = new SparkConf() .setMaster("local[1]") .setAppName(this.getClass().getSimpleName() .filter(!_.equals('$'))) println(this.getClass().getSimpleName().filter(!_.equals('$'))) val sc = new SparkContext(conf) //创建存储数据集HashMap集合 val data = new HashMap[Int, Int]() //生成数据集内容 def getData(): HashMap[Int, Int] = { for(i <- 1 to 50) { data += (i -> (2 * i)) //写入公式y=2x } data } //假设a=0 var a: Double = 0 //设置步进系数 var b: Double = 0.1 //设置迭代公式 def sgd(x: Double, y: Double) = { a = a - b * ((a * x) - y) } def main(args: Array[String]) { //获取数据集 val dataSource = getData() println("data: ") dataSource.foreach(each => println(each + " ")) println("\nresult: ") var num = 1 //开始迭代 dataSource.foreach(myMap => { println(num + ":" + a + "("+myMap._1+","+myMap._2+")") sgd(myMap._1, myMap._2) num = num + 1 }) //显示结果 println("最终结果a为 " + a) } } |
2、线性回归
2.1、数据
首先是做下小数据集的实验,测试的公式在代码中有说明,实验数据如下:
5,1 1
7,2 1
10,2 2
9,3 2
11,4 1
19,5 3
18,6 2
2.2、代码二:
package mllib import org.apache.log4j.{Level, Logger} import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.regression.{LinearRegressionWithSGD, LabeledPoint} import org.apache.spark.{SparkContext, SparkConf} /** * 线性回归1-小数据集 * 公式:f(x) = ax1 + bx2 * Created by 汪本成 on 2016/8/6. */ object LinearRegression1 { //屏蔽不必要的日志显示在终端上 Logger.getLogger("org.apache.spark").setLevel(Level. |