【機器學習筆記三】迴歸分析 - 嶺迴歸

參考資料apache

【1】    http://blog.csdn.net/google19890102/article/details/27228279dom

【2】    講講共線性問題 http://www.jianshu.com/p/ef1b27b8aee0?from=timeline機器學習

【3】    最小二乘法的矩陣形式推導 http://blog.csdn.net/monsterhoho/article/details/46753673函數

【4】    Spark MLlib 機器學習實踐學習

 

一、共線性及多重共線性問題google

對於最小二乘法,咱們有矩陣形式的推導以下:spa

此時對x求導,有,獲得.net

對於上述解,當x中存在二個或多個線性相關形式,就會接近於0,形成很大的偏差,所以爲了解決這個偏差咱們在代價函數中增長了擾動項,相似矩陣形式變爲:scala

 

二、嶺迴歸模型3d

所謂的嶺迴歸就是在線性迴歸的基礎上增長了正則項,一般爲lasso迴歸(L1迴歸)和嶺迴歸(L2迴歸)。嶺迴歸公式以下:

 

三、嶺迴歸Spark Mlib下例子

 

package com.fredric.spark.lr

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

import scala.util.Random

/*-
 * 迴歸分析 嶺迴歸
 * Fredric 2017
 */
object lrl2 {
  def main(args:Array[String]): Unit ={
    val conf = new SparkConf().setMaster("local").setAppName("Rr01")
    val sc   = new SparkContext(conf)

    //以二元線性迴歸y = 7*x1 + 5*x2 + 3爲例,初始化數據
    val Array = new Array[LabeledPoint](500)

    for(t <- 1 to 500){

      val random = new Random();

      val x1 = random.nextInt(4) + random.nextDouble()
      val x2 = random.nextInt(3) + random.nextDouble()
      val y = 7 * x1 + 5 * x2 + (new Random()).nextDouble() + 3

      Array(t-1) = new LabeledPoint(y,  Vectors.dense(x1, x2, 1))
    }

    val data = sc.makeRDD(Array)
    
    //採用嶺迴歸模型
    val model = new RidgeRegressionWithSGD()
    model.optimizer.setNumIterations(100);//迭代100次

    val res = model.run(data)

    //輸出結果爲 [7.016836776795048,5.045698277235657,3.3398441790354525]
    println(res.weights)
  }
}
相關文章
相關標籤/搜索