具體的數學推導可以參照這一篇部落格
#批量梯度下降
#擬合函式:y = theta0 + theta1 * x
#損失函式: j = 1 / 2 * sum (y(x) - y) ^ 2
import matplotlib.pyplot as plt
#造資料
x_train = [150,200,250,300,350,400,600]
y_train = [6450,7450,8450,9450,11450,15450,18450]
#資料初始化
pace = 0.000000001 #步長
theta0 = 0 #01
theta1 = 1 #02
epsilon = 0.00001 #收斂值
#樣本的個數
m = len(x_train)
#想要迭代次數
want = 5000
n = 1
def y(x):
return theta0 + theta1 * x
#開始迭代
while 1:
theta0_der = 0
theta1_der = 0
for i in range(m):
theta0_der += y(x_train[i]) - y_train[i]
theta1_der += (y(x_train[i]) - y_train[i]) * x_train[i]
theta0 -= pace * theta0_der
theta1 -= pace * theta1_der
print(theta0,theta1) #列印每一次迭代的值
n += 1;
#判斷是否收斂
if (abs(pace * theta0_der) <= epsilon and abs(pace * theta1_der) <= epsilon) or want == n:
break
#資料視覺化
plt.plot(x_train,[y(x) for x in x_train]) #訓練出的一條直線是擬合的結果
plt.plot(x_train,y_train,'bo')
plt.show()
執行結果
# 梯度下降
# 擬合函式:y = theta0 + theta1 * x
# 損失函式: j = 1 / 2 * sum (y(x) - y) ^ 2
import matplotlib.pyplot as plt
import random
# 造資料
x_train = [150, 200, 250, 300, 350, 400, 600]
y_train = [6450, 7450, 8450, 9450, 11450, 15450, 18450]
# 資料初始化
pace = 0.000001 # 步長
theta0 = 1 # 01
theta1 = 1 # 02
epsilon = 0.0001 # 收斂值
# 樣本的個數
m = len(x_train)
# 想要迭代次數
want = 5000
n = 1
def y(x):
return theta0 + theta1 * x
# 開始迭代
while 1:
theta0_der = 0
theta1_der = 0
i = random.randint(0,m-1)
theta0_der += y(x_train[i]) - y_train[i]
theta1_der += (y(x_train[i]) - y_train[i]) * x_train[i]
theta0 -= pace * theta0_der
theta1 -= pace * theta1_der
print(theta0, theta1) # 列印每一次迭代的值
n += 1;
# 判斷是否收斂
if (abs(pace * theta0_der) <= epsilon and abs(pace * theta1_der) <= epsilon) or want == n:
break
# 資料視覺化
plt.plot(x_train, [y(x) for x in x_train]) # 訓練出的一條直線是擬合的結果
機器學習(ML)十五之梯度下降和隨機梯度下降
梯度下降在深度學習中很少被直接使用,但理解梯度的意義以及沿著梯度反方向更新自變數可能降低目標函式值的原因是學習後續優化演算法的基礎。隨後,將引出隨機梯度下降 stochastic gradient descent 以簡單的一維梯度下降為例,解釋梯度下降演算法可能降低目標函式值的原因。假設連續可導的函...
ML05 最優化方法 梯度下降
梯度下降是目前機器學習 深度學習解決最優化問題的演算法中,最核心 應用最廣的方法。梯度下降是一種尋找函式極小值的方法。該方法最普遍的做法是 在已知引數當前值的情況下,按當前點對應的梯度向量的反方向,並按事先給定好的步長大小,對引數進行調整。按如上方法對引數做出多次調整後,函式就會逼近乙個極小值。為什...
梯度下降 隨機梯度下降 批梯度下降
下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...