import numpy as np
#1取樣資料
data = #儲存樣本集的列表
for i in range(100):#迴圈取樣100個點
x = np.random.uniform(-10,10)#隨機取樣輸入x
# 取樣高斯雜訊
eps = np.random.normal(0.,0.1)
#得到模型的輸出
y = 1.477*x +0.089 +eps
data = np.array(data)#轉換為2維陣列
print(data)
#2計算誤差
def mse(b,w,points):
#根據當前的w,b引數計算軍方差損失
totalerror = 0
for i in range(0,len(points)):#迴圈迭代所有點
x = points[i,0]# 獲得i號店的輸入x
y = points[i,1]# 獲得i號點的輸出y
totalerror+=(y-(w*x+b))**2
return totalerror/float(len(points))#得到均方差
#3,計算梯度
def step_gradient(b_current,w_current,points,lr):
#計算誤差函式在所有點上的導數,並更新w,b
b_gradient = 0
w_gradient =0
m = float(len(points))
for i in range(0,len(points)):
x = points[i,0]
y=points[i,1]
b_gradient +=(2/m)*((w_current*x+b_current)-y)
w_gradient += (2/m) * x*((w_current*x+b_current) - y)
#根據梯度下降演算法更新w,b,lr為xuexilv
new_b = b_current -(lr*b_gradient)
new_w = w_current -(lr * w_gradient)
return [new_b,new_w]
#梯度更新
def gradient_descent(points,starting_b,starting_w,lr,num_iterations):
b = starting_b
w = starting_w
for step in range(num_iterations):
b,w = step_gradient(b,w,np.array(points),lr)
loss = mse(b,w,points)
if step%50 == 0:
print("iteration:{},loss:{},w:{},b:{}".format(step,loss,w,b))
return [b,w]
def main():
lr = 0.01
initial_b=0
initial_w = 0
num_iterations = 1000
[b,w] = gradient_descent(data,initial_b,initial_w,lr,num_iterations)
loss = mse(b,w,data)
print("final loss:{},w:{},b:{}".format(loss,w,b))
梯度下降 隨機梯度下降 批梯度下降
下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...
梯度下降 隨機梯度下降和批量梯度下降
對比梯度下降和隨機梯度下降和批量梯度下降 之前看的知識比較零散,沒有乙個系統的解釋說明,看了一些網上的博主的分析,總結了一下自己的理解。例子這裡我參照其他博主的例子做了一些修改,首先是梯度下降 coding utf 8 import random this is a sample to simula...
stanford 梯度 梯度下降,隨機梯度下降
一 梯度gradient 在標量場f中的一點處存在乙個向量g,該向量方向為f在該點處變化率最大的方向,其模也等於這個最大變化率的數值,則向量g稱為標量場f的梯度。在向量微積分中,標量場的梯度是乙個向量場。標量場中某一點上的梯度指向標量場增長最快的方向,梯度的長度是這個最大的變化率。更嚴格的說,從歐氏...