日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

随机梯度下降法

發布時間:2025/4/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 随机梯度下降法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


隨機梯度下降法

分類: Algorithm 98人閱讀 評論(0) 收藏 舉報 python算法迭代斯坦福大學機器學習

剛剛看完斯坦福大學機器學習第四講(牛頓法),也對學習過程做一次總結吧。

一、誤差準則函數與隨機梯度下降:

數學一點將就是,對于給定的一個點集(X,Y),找到一條曲線或者曲面,對其進行擬合之。同時稱X中的變量為特征(Feature),Y值為預測值。

如圖:


一個典型的機器學習的過程,首先給出一組輸入數據X,我們的算法會通過一系列的過程得到一個估計的函數,這個函數有能力對沒有見過的新數據給出一個新的估計Y,也被稱為構建一個模型。

我們用X1、X2...Xn 去描述feature里面的分量,用Y來描述我們的估計,得到一下模型:


我們需要一種機制去評價這個模型對數據的描述到底夠不夠準確,而采集的數據x、y通常來說是存在誤差的(多數情況下誤差服從高斯分布),于是,自然的,引入誤差函數:


關鍵的一點是如何調整theta值,使誤差函數J最小化。J函數構成一個曲面或者曲線,我們的目的是找到該曲面的最低點:


假設隨機站在該曲面的一點,要以最快的速度到達最低點,我們當然會沿著坡度最大的方向往下走(梯度的反方向)

用數學描述就是一個求偏導數的過程:


這樣,參數theta的更新過程描述為以下:

? ?(α表示算法的學習速率)

二、算法實現與測試:

通過一組數據擬合 y = theta1*x1 +theta2*x2

[python] view plaincopyprint?
  • #Python?3.3.5??
  • #?matrix_A??訓練集??
  • matrix_A?=?[[1,4],?[2,5],?[5,1],?[4,2]]??
  • Matrix_y?=?[19,26,19,20]??
  • theta?=?[2,5]??
  • #學習速率??
  • leraing_rate?=?0.005??
  • loss?=?50??
  • iters?=?1??
  • Eps?=?0.0001??
  • while?loss>Eps?and?iters?<1000?:??
  • ????loss?=?0??
  • ????for?i?in?range(3)?:??
  • ????????h?=?theta[0]*matrix_A[i][0]?+?theta[1]*matrix_A[i][1]???
  • ????????theta[0]?=?theta[0]?+?leraing_rate*(Matrix_y[i]-h)*matrix_A[i][0]??
  • ????????theta[1]?=?theta[1]?+?leraing_rate*(Matrix_y[i]-h)*matrix_A[i][1]??
  • ????for?i?in?range(3)?:??
  • ????????Error?=?0??
  • ????????Error?=?theta[0]*matrix_A[i][0]?+?theta[1]*matrix_A[i][1]?-?Matrix_y[i]??
  • ????????Error?=?Error*Error??
  • ????????loss?=?loss?+Error??
  • ????iters?=?iters?+1??
  • print?('theta=',theta)??
  • print?('iters=',iters)??
  • #Python 3.3.5 # matrix_A ?訓練集 matrix_A = [[1,4], [2,5], [5,1], [4,2]] Matrix_y = [19,26,19,20] theta = [2,5] #學習速率 leraing_rate = 0.005 loss = 50 iters = 1 Eps = 0.0001 while loss>Eps and iters <1000 :loss = 0for i in range(3) :h = theta[0]*matrix_A[i][0] + theta[1]*matrix_A[i][1]?theta[0] = theta[0] + leraing_rate*(Matrix_y[i]-h)*matrix_A[i][0]theta[1] = theta[1] + leraing_rate*(Matrix_y[i]-h)*matrix_A[i][1]for i in range(3) :Error = 0Error = theta[0]*matrix_A[i][0] + theta[1]*matrix_A[i][1] - Matrix_y[i]Error = Error*Errorloss = loss +Erroriters = iters +1 print ('theta=',theta) print ('iters=',iters)求解結果: [python] view plaincopyprint?
  • >>>???
  • theta=?[2.9980959216157945,?4.001522800837675]??
  • iters=?75??
  • >>> theta= [2.9980959216157945, 4.001522800837675] iters= 75但如果對輸入數據添加一些噪聲

    [python] view plaincopyprint?
  • matrix_A?=?[[1.05,4],?[2.1,5],?[5,1],?[4,2]]??
  • matrix_A = [[1.05,4], [2.1,5], [5,1], [4,2]]求解結果為:

    [python] view plaincopyprint?
  • >>>???
  • theta=?[3.0095950685197725,?3.944718521027671]??
  • iters=?1000??
  • >>> theta= [3.0095950685197725, 3.944718521027671] iters= 1000可見在有噪聲的情況下,要及時調整模型誤差精度、迭代次數上限,一期達到我們的需求。

    以上圖片和公式均摘自:梯度下降法http://blog.csdn.net/zbc1090549839/article/details/38149561

    總結

    以上是生活随笔為你收集整理的随机梯度下降法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。