# -*- coding: utf-8 -*-
"""created on tue mar 13 20:49:03 2018
@author:
"""import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
##產生訓練資料,生成模型為2*x+5+random.randint(50)
x=np.arange(0.,10.,0.2)
m=len(x)
print(m)
x0=np.full(m,1.0)
input_data=np.vstack([x0,x]).t
target_data=2*input_data[:,1]+5*input_data[:,0]+np.random.randn(m)
loop_max=100000 #設定最大訓練次數,防止程式死迴圈
epsilon=1e-3 # 設定訓練模型容許誤差
np.random.seed(0) #設定隨機產生種子,讓每次生成隨機數一致
theta=np.random.randn(2) # 初始化訓練模型的權重
alpha=0.001 #訓練速度(太大容易導致欠擬合,太小容易導致模型不收斂)
diff=0.
error = np.zeros(2) #初始化模型誤差
count=0 #統計模型迴圈次數
finish=0 #模型訓練截止標誌
minibatch_size=5 #小批量取樣間隔(也可以每次只取樣這幾個資料)
while countcount+=1
for i in range(1,m,minibatch_size):
sum_m=np.zeros(2)
k=np.random.randint(0,49) # 隨機選取資料更新模型權重
dif=(np.dot(theta,input_data[k])-target_data[k])*input_data[k]
sum_m=sum_m+dif
theta=theta-alpha*(1.0/minibatch_size)*sum_m
##跳出迴圈條件
if np.linalg.norm(theta-error)finish=1
break
else:
error=theta
print('loopcount=%d' %count, '\tw:', theta)
print('loop count=%d' %count,'\tw:',theta)
#根據python scipy 庫中stats線性擬合函式來驗證模型的正確性
slope, intercept, r_value, p_value,slope_std_error = stats.linregress(x, target_data)
print ('intercept = %s slope = %s'% (intercept, slope) )
#畫出訓練資料與擬合的模型圖
plt.plot(x, target_data, 'g*')
plt.plot(x, theta[1]* x +theta[0],'r')
plt.show()
批量梯度下降,隨機梯度下降,小批量梯度下降
在機器學習領域中,梯度下降的方式有三種,分別是 批量梯度下降法bgd 隨機梯度下降法sgd 小批量梯度下降法mbgd,並且都有不同的優缺點。下面我們以線性回歸演算法 也可以是別的演算法,只是損失函式 目標函式 不同而已,它們的導數的不同,做法是一模一樣的 為例子來對三種梯度下降法進行比較。假設 特徵...
小批量梯度下降演算法步驟 優化演算法之梯度下降演算法
在應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。1.批量梯度下降法bgd 現在下面以lr演算法為例對這三種演算法從原理到 進行講解 由lr演算法可知lr演算法的損失函式為 損失函式j 最小值時的 則...
小批量梯度下降演算法步驟 梯度下降演算法原理及推導
今天我們就來介紹用來優化代價函式的梯度下降演算法 gradient descent algorithm 1 原理 那梯度下降究竟為何方神聖?我來用最通俗的語言來介紹下 假設你站在華山之巔,你現在想以最快速度下山,那你肯定是找一條最陡峭的路走。你環顧四周,找到了一條路線,恩,這個方向是最陡的。於是你就...