最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spark MLlib隨機梯度下降法概述與實例

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

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

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

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

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

這里寫圖片描述 

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

這里寫圖片描述

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

這里寫圖片描述

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

Spark MLlib隨機梯度下降算法實例

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

package cn.just.shinelon.MLlib.Algorithm

import java.util

import scala.collection.immutable.HashMap

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

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

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

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

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

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

相關(guān)文章

  • SpringBoot基于SpringSecurity表單登錄和權(quán)限驗證的示例

    SpringBoot基于SpringSecurity表單登錄和權(quán)限驗證的示例

    這篇文章主要介紹了SpringBoot基于SpringSecurity表單登錄和權(quán)限驗證的示例。文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 老生常談Java字符串進階(必看篇)

    老生常談Java字符串進階(必看篇)

    下面小編就為大家?guī)硪黄仙U凧ava字符串進階(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Spring Cloud Gateway Hystrix fallback獲取異常信息的處理

    Spring Cloud Gateway Hystrix fallback獲取異常信息的處理

    這篇文章主要介紹了Spring Cloud Gateway Hystrix fallback獲取異常信息的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用AbstractRoutingDataSource實現(xiàn)數(shù)據(jù)源動態(tài)切換的實例

    使用AbstractRoutingDataSource實現(xiàn)數(shù)據(jù)源動態(tài)切換的實例

    AbstractRoutingDataSource 是 Spring 框架提供的一個抽象類,用于實現(xiàn)動態(tài)數(shù)據(jù)源路由,這個類主要用于多數(shù)據(jù)源場景,其中可以根據(jù)不同的條件動態(tài)地切換到不同的數(shù)據(jù)源,本文給大家介紹了如何使用AbstractRoutingDataSource實現(xiàn)數(shù)據(jù)源動態(tài)切換,需要的朋友可以參考下
    2024-03-03
  • SpringBoot整合RabbitMQ實現(xiàn)交換機與隊列的綁定

    SpringBoot整合RabbitMQ實現(xiàn)交換機與隊列的綁定

    這篇文章將通過幾個實例為大家介紹一些SpringBoot中RabbitMQ如何綁定交換機(交換器)與隊列,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-05-05
  • mybatis中mapper-locations的作用

    mybatis中mapper-locations的作用

    這篇文章主要介紹了mybatis中mapper-locations的具體作用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java模擬單鏈表和雙端鏈表數(shù)據(jù)結(jié)構(gòu)的實例講解

    Java模擬單鏈表和雙端鏈表數(shù)據(jù)結(jié)構(gòu)的實例講解

    這篇文章主要介紹了Java模擬單鏈表和雙端鏈表數(shù)據(jù)結(jié)構(gòu)的實例,注意這里的雙端鏈表不是雙向鏈表,是在單鏈表的基礎(chǔ)上保存有對最后一個鏈接點的引用,需要的朋友可以參考下
    2016-04-04
  • springBoot接入阿里云oss的實現(xiàn)步驟

    springBoot接入阿里云oss的實現(xiàn)步驟

    這篇文章主要介紹了springBoot接入阿里云oss的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式

    javacv-ffmpeg ProcessBuilder批量旋轉(zhuǎn)圖片方式

    為了批量處理大量圖片的旋轉(zhuǎn),可以使用javacv-ffmpeg結(jié)合ProcessBuilder,首先在maven配置文件中添加ffmpeg及javacpp依賴,javacpp支持調(diào)用C/C++方法,而ffmpeg基于C語言,使用ProcessBuilder創(chuàng)建進程調(diào)用ffmpeg方法
    2024-09-09
  • intellij idea配置外部dtd文件的方法

    intellij idea配置外部dtd文件的方法

    這篇文章主要介紹了intellij idea配置外部dtd文件的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09

最新評論

萨迦县| 年辖:市辖区| 上蔡县| 调兵山市| 海城市| 容城县| 东乡| 中江县| 托里县| 乌鲁木齐县| 中阳县| 卢氏县| 三门县| 朔州市| 滁州市| 新民市| 澎湖县| 老河口市| 勐海县| 永清县| 松溪县| 延吉市| 文安县| 石景山区| 兰西县| 江川县| 常德市| 新巴尔虎左旗| 文昌市| 陵水| 宣恩县| 宜黄县| 隆尧县| 德阳市| 镇雄县| 芜湖县| 双峰县| 隆昌县| 江阴市| 泽州县| 扬州市|