梯度下降法,一般用來求解線性回歸方程,我的理解是根據一組形如(特徵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...
機器學習 梯度下降法
機器學習中往往需要刻畫模型與真實值之間的誤差,即損失函式,通過最小化損失函式來獲得最優模型。這個最優化過程常使用梯度下降法完成。在求解損失函式的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函式和模型引數值。解釋梯度之前需要解釋導數與偏導數。導數與偏導數的公式如下 導數與偏導數都是...