機器學習 梯度下降法

2021-08-02 11:21:46 字數 1993 閱讀 1965

梯度下降法,一般用來求解線性回歸方程,我的理解是根據一組形如(特徵1,特徵2...-結果)的資料來找到這些對應的特徵和結果之間的聯絡

例如,我們利用一組**-銷量的資料判斷乙個物品的銷量和**之間的關係

我們要求的線性回歸方程可以表示為:

銷量 = ** * **引數

實質上其實就是找到對應的**引數

而當影響乙個結果的特徵不只有乙個的時候(例如影響物品銷量的不只有**,還有廣告投放數量等),我們需要求的回歸方程可以表示為

其中θ表示各個特徵的引數

假設我們已經找到了對應的引數,我們用引數求得的結果與實際結果之間的距離可以用實際結果-求得結果的平方來衡量,即

換而言之,只要我們找到的引數能讓j(θ)的值最小,即表示我們找到了最能表示特徵與結果之間關係的引數,而找到這個函式最小值對應的θ的方法包括梯度下降法

梯度下降法是只每次朝梯度的方向移動乙個步長,以此達到函式的最小值

梯度可以理解為乙個向量,它指向了函式增長最快的方向,不懂的可以去看看網易公開課的多變數微積分

假設只有一組變數,求得j(θ)的梯度為

用梯度乘乙個步長即是每次θ要移動的距離

有了這些,就可以寫**了

import numpy as np

import random

def gettheta2(x,y,times,step):

'''隨機梯度下降演算法

'''a, b = np.shape(x)

train = np.ones((a, b + 1))

m, n = np.shape(train)

train[:, 1:] = x

theta = np.zeros(n)

for i in range(times):

a = random.randint(0,m-1)

randm_train = train[a]

randm_label = y[a]

hp = np.dot(randm_train,theta.transpose())

error = randm_label - hp

grand = np.dot(randm_train.transpose(),error)

theta = theta+grand*step

return theta

def gettheta1(x,y,times,step):

'''批量梯度下降演算法

'''a,b = np.shape(x)

train = np.ones((a,b+1))

m, n = np.shape(train)

train[:,1:] = x

theta = np.zeros(n)

for i in range(times):

hp = np.dot(train,theta.transpose())

error = hp - y

grand = np.dot(train.transpose(),error)/m

theta = theta- step*grand

return train,theta

def liner(x,labe,times,step,input):

theta = gettheta2(x,labe,times,step)

result = np.dot(input,theta)

if __name__ == "__main__":

input = np.array([1,3.1,5.5])

liner(x,y,1000,0.01,input)

只需要記住還有個θ0,就不難理解上面的**

機器學習之梯度下降法 梯度下降法分析

梯度下降法的基本思想是函式沿著其梯度方向增加最快,反之,沿著其梯度反方向減小最快。在前面的線性回歸和邏輯回歸中,都採用了梯度下降法來求解。梯度下降的迭代公式為 j j j j 在回歸演算法的實驗中,梯度下降的步長 為0.01,當時也指出了該步長是通過多次時間找到的,且換一組資料後,演算法可能不收斂。...

機器學習 梯度下降法

1 梯度下降法的邏輯思路 的取值影響獲得最優解的速度 取值不合適,甚至得不到最優解 是梯度下降法的乙個超引數 一般需要調參找到最適合的 太小,減慢收斂學習速度 太大,導致不收斂 2 梯度下降法的問題 3 其它1 具體實現 模擬損失函式 y x 2.5 2 1 資料集特徵值 plot x np.lin...

機器學習 梯度下降法

機器學習中往往需要刻畫模型與真實值之間的誤差,即損失函式,通過最小化損失函式來獲得最優模型。這個最優化過程常使用梯度下降法完成。在求解損失函式的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函式和模型引數值。解釋梯度之前需要解釋導數與偏導數。導數與偏導數的公式如下 導數與偏導數都是...