欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spark MLlib隨機(jī)梯度下降法概述與實(shí)例

 更新時(shí)間:2018年08月31日 10:19:04   作者:不清不慎  
這篇文章主要為大家詳細(xì)介紹了Spark MLlib隨機(jī)梯度下降法概述與實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

機(jī)器學(xué)習(xí)算法中回歸算法有很多,例如神經(jīng)網(wǎng)絡(luò)回歸算法、蟻群回歸算法,支持向量機(jī)回歸算法等,其中也包括本篇文章要講述的梯度下降算法,本篇文章將主要講解其基本原理以及基于Spark MLlib進(jìn)行實(shí)例示范,不足之處請(qǐng)多多指教。

梯度下降算法包含多種不同的算法,有批量梯度算法,隨機(jī)梯度算法,折中梯度算法等等。對(duì)于隨機(jī)梯度下降算法而言,它通過(guò)不停的判斷和選擇當(dāng)前目標(biāo)下最優(yōu)的路徑,從而能夠在最短路徑下達(dá)到最優(yōu)的結(jié)果。我們可以在一個(gè)人下山坡為例,想要更快的到達(dá)山低,最簡(jiǎn)單的辦法就是在當(dāng)前位置沿著最陡峭的方向下山,到另一個(gè)位置后接著上面的方式依舊尋找最陡峭的方向走,這樣每走一步就停下來(lái)觀察最下路線的方法就是隨機(jī)梯度下降算法的本質(zhì)。

隨機(jī)梯度下降算法理論基礎(chǔ)

在線性回歸中,我們給出回歸方程,如下所示:

這里寫圖片描述 

我們知道,對(duì)于最小二乘法要想求得最優(yōu)變量就要使得計(jì)算值與實(shí)際值的偏差的平方最小。而隨機(jī)梯度下降算法對(duì)于系數(shù)需要通過(guò)不斷的求偏導(dǎo)求解出當(dāng)前位置下最優(yōu)化的數(shù)據(jù),那么梯度方向公式推導(dǎo)如下公式,公式中的θ會(huì)向著梯度下降最快的方向減少,從而推斷出θ的最優(yōu)解。

這里寫圖片描述

因此隨機(jī)梯度下降法的公式歸結(jié)為通過(guò)迭代計(jì)算特征值從而求出最合適的值。θ的求解公式如下。

這里寫圖片描述

α是下降系數(shù),即步長(zhǎng),學(xué)習(xí)率,通俗的說(shuō)就是計(jì)算每次下降的幅度的大小,系數(shù)越大每次計(jì)算的差值越大,系數(shù)越小則差值越小,但是迭代計(jì)算的時(shí)間也會(huì)相對(duì)延長(zhǎng)。θ的初值可以隨機(jī)賦值,比如下面的例子中初值賦值為0。

Spark MLlib隨機(jī)梯度下降算法實(shí)例

下面使用Spark MLlib來(lái)迭代計(jì)算回歸方程y=2x的θ最優(yōu)解,代碼如下:

package cn.just.shinelon.MLlib.Algorithm

import java.util

import scala.collection.immutable.HashMap

/**
 * 隨機(jī)梯度下降算法實(shí)戰(zhàn)
 * 隨機(jī)梯度下降算法:最短路徑下達(dá)到最優(yōu)結(jié)果
 * 數(shù)學(xué)表達(dá)公式如下:
 * f(θ)=θ0x0+θ1x1+θ2x2+...+θnxn
 * 對(duì)于系數(shù)要通過(guò)不停地求解出當(dāng)前位置下最優(yōu)化的數(shù)據(jù),即不停對(duì)系數(shù)θ求偏導(dǎo)數(shù)
 * 則θ求解的公式如下:
 * θ=θ-α(f(θ)-yi)xi
 * 公式中α是下降系數(shù),即每次下降的幅度大小,系數(shù)越大則差值越小,系數(shù)越小則差值越小,但是計(jì)算時(shí)間也相對(duì)延長(zhǎng)
 */
object SGD {
 var data=HashMap[Int,Int]()     //創(chuàng)建數(shù)據(jù)集
 def getdata():HashMap[Int,Int]={
  for(i <- 1 to 50){        //創(chuàng)建50個(gè)數(shù)據(jù)集
   data += (i->(2*i))       //寫入公式y(tǒng)=2x
  }
  data               //返回?cái)?shù)據(jù)集
 }

 var θ:Double=0            //第一步 假設(shè)θ為0
 var α:Double=0.1           //設(shè)置步進(jìn)系數(shù)

 def sgd(x:Double,y:Double)={    //隨機(jī)梯度下降迭代公式
  θ=θ-α*((θ*x)-y)         //迭代公式
 }

 def main(args: Array[String]): Unit = {
  val dataSource=getdata()     //獲取數(shù)據(jù)集
  dataSource.foreach(myMap=>{    //開(kāi)始迭代
   sgd(myMap._1,myMap._2)     //輸入數(shù)據(jù)
  })
  println("最終結(jié)果值θ為:"+θ)
 }
}

需要注意的是隨著步長(zhǎng)系數(shù)增大以及數(shù)據(jù)量的增大,θ值偏差越來(lái)越大。同時(shí)這里也遺留下一個(gè)問(wèn)題,當(dāng)數(shù)據(jù)量大到一定程度,為什么θ值會(huì)為NaN,筆者心中有所疑惑,如果哪位大佬有想法可以留言探討,謝謝!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談java運(yùn)用注解實(shí)現(xiàn)對(duì)類中的方法檢測(cè)的工具

    淺談java運(yùn)用注解實(shí)現(xiàn)對(duì)類中的方法檢測(cè)的工具

    這篇文章主要介紹了淺談java運(yùn)用注解實(shí)現(xiàn)對(duì)類中的方法檢測(cè)的工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • SpringBoot自定義注解實(shí)現(xiàn)Token校驗(yàn)的方法

    SpringBoot自定義注解實(shí)現(xiàn)Token校驗(yàn)的方法

    這篇文章主要介紹了SpringBoot自定義注解實(shí)現(xiàn)Token校驗(yàn)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java雙重MD5加密實(shí)現(xiàn)安全登錄

    Java雙重MD5加密實(shí)現(xiàn)安全登錄

    MD5對(duì)密碼進(jìn)行加密存儲(chǔ)是常見(jiàn)的一種加密方式,本文主要介紹了Java雙重MD5加密實(shí)現(xiàn)安全登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 使用Maven 搭建 Spring MVC 本地部署Tomcat的詳細(xì)教程

    使用Maven 搭建 Spring MVC 本地部署Tomcat的詳細(xì)教程

    這篇文章主要介紹了使用Maven 搭建 Spring MVC 本地部署Tomcat,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Reactive Programming入門概念詳解

    Reactive Programming入門概念詳解

    這篇文章主要為大家介紹了Reactive Programming入門概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 使用Spring框架實(shí)現(xiàn)用戶登錄

    使用Spring框架實(shí)現(xiàn)用戶登錄

    這篇文章主要為大家詳細(xì)介紹了使用Spring框架實(shí)現(xiàn)用戶登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • java獲取兩個(gè)數(shù)組中不同數(shù)據(jù)的方法

    java獲取兩個(gè)數(shù)組中不同數(shù)據(jù)的方法

    這篇文章主要介紹了java獲取兩個(gè)數(shù)組中不同數(shù)據(jù)的方法,實(shí)例分析了java操作數(shù)組的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 如何在IDE部署springboot項(xiàng)目(有swagger和無(wú)swagger都是一樣的)到服務(wù)器或者虛擬機(jī)上的docker

    如何在IDE部署springboot項(xiàng)目(有swagger和無(wú)swagger都是一樣的)到服務(wù)器或者虛擬機(jī)上的docke

    這篇文章主要介紹了如何在IDE部署springboot項(xiàng)目(有swagger和無(wú)swagger都是一樣的)到服務(wù)器或者虛擬機(jī)上的docker,本文給大家分享我的安裝歷程,需要的朋友可以參考下
    2023-01-01
  • java實(shí)現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信)

    java實(shí)現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信)

    這篇文章主要介紹了java實(shí)現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Spring Boot集成Quartz注入Spring管理的類的方法

    Spring Boot集成Quartz注入Spring管理的類的方法

    本篇文章主要介紹了Spring Boot集成Quartz注入Spring管理的類的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04

最新評(píng)論