深度學習入門實戰系列筆記(1) 線性回歸實戰

2022-06-21 08:24:16 字數 3866 閱讀 5139

深度學習入門實戰系列筆記(1)——線性回歸實戰

目錄梯度下降法簡介:

梯度下降演算法的思想:選擇合適的損失函式,開始時隨機選擇乙個引數作為初值,選擇合適的學習率,即步長。在訓練過程中不斷迭代出下乙個能夠使得損失函式下降速度最快的引數。持續計算直到尋找到乙個區域性最小值,而初值的不同可能會造成函式尋找到不同的最小值點。 但是對於線性回歸而言,其代價函式總是凸或者凹函式,因此線性回歸函式中的區域性最優解就是全域性最優解。

1.設擬合直線方程為

\[y^=w x+b, y_為真實值即所給的樣本資料的縱座標的值

\]2.定義損失函式,解決最小二乘問題

\[\operatorname=\frac \sum_^\left(w x+b-y_\right)^

\]3.計算每一步的梯度

4.開始迭代過程,採用梯度下降法,確定w和b的值

5.繪製影象

'''

@ file name :practice of linear regression

@ role of documents: for getting started with deep learning

@ author's name: 草原乙隻鷹

'''import numpy as np

import matplotlib.pyplot as plt

plt.rcparams['font.sans-serif']=['simhei'] #用來正常顯示中文標籤

plt.rcparams['axes.unicode_minus']=false

# 1.定義損失函式,計算誤差 loss = 求和(wx+b-yi)的平方和

def compute_error_for_line_given_points(b,w,points):

totalerror = 0

for i in range(0,len(points)):

x = points[i,0]

y = points[i,1]

'''points表示引用列表中的資料,points中的資料是成對排列為兩列,

第一列標號為0,第二列標號為1,行號為i,x在第一行,y在第二行

'''totalerror += (y - (w * x + b)) ** 2

return totalerror / (2*float(len(points)))

# 2. 計算每一步的梯度,對b和w求導,並更新引數,返回

def step_gradient(b_current,w_current,points,learningrate):

b_gradient = 0

w_gradient = 0

n = float(len(points))

for i in range(len(points)):

x = points[i,0]

y = points[i,1]

b_gradient += -(1/n)*(y - ((w_current*x)+b_current))

w_gradient += -(1/n)*x*(y-((w_current*x)+b_current))

new_b = b_current - (learningrate*b_gradient)

new_w = w_current - (learningrate*w_gradient)

return [new_b,new_w]

# 3.開始執行梯度下降迭代過程,並繪製影象

def gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations):

b = starting_b

w = starting_w

losserror = # losserror用來儲存每輪迭代的誤差,用來繪製函式影象

for i in range(num_iterations):

b, w = step_gradient(b, w, np.array(points), learning_rate)

# np.array()的作用就是按照一定要求將object轉換為陣列。

# 將此輪迭代的誤差新增到losserror列表中

# 繪製誤差函式隨著迭代次數增加對應的影象

plt.figure() # 定義乙個影象視窗

plt.plot(range(num_iterations), losserror)

plt.xlabel('迭代次數')

plt.ylabel('損失函式的值')

plt.title('損失函式隨迭代次數關係圖')

plt.show() # 注意不能忘了plt.show()

return [b, w]

# 4.執行程式,並定義所需引數

def run():

points = np.genfromtxt("data.csv", delimiter=",")

learning_rate = 0.0001

initial_b = 0 # 假設初值為零

initial_w = 0

num_iterations = 20 # 定義迭代次數為20次

# 假設b,w的初值後,計算誤差

print("starting gradient descent at b = , m = , error = "

.format(initial_b, initial_w,

compute_error_for_line_given_points(initial_b, initial_w, points))

)print("running...")

# 開始執行梯度下降法計算b和w的值

[b, w] = gradient_descent_runner(points, initial_b, initial_w, learning_rate, num_iterations)

print("after iterations b = , m = , error = ".

format(num_iterations, b, w,

compute_error_for_line_given_points(b, w, points))

)[b_final, w_final] = [b,w]

# 繪製擬合影象

c = np.linspace(1.0, 100.0, 20) # np.linspace()函式為在指定的間隔內返回均勻間隔的數字,把區間等分

d = np.zeros(20)

for i in range(20):

d[i] = c[i] * w_final + b_final

plt.figure()

# 新增原始資料

x = points[:, 0]

y = points[:, 1]

plt.scatter(x, y, c='r', s=4.0)

plt.plot(c, d)

plt.title('資料擬合影象')

plt.show()

'''scatter()函式用來繪製散點圖並,使用實參s設定了繪製圖形時使用的點的尺寸。

'''# 5.程式開始執行

提取碼: hgut

深度學習實戰之線性回歸1

我理解的線性回歸就是,比較簡單的一維的線性回歸,所要求解的方程就是 你要做的就是不斷的學習資料集,不斷的更新w和b,讓損失函式越小越好。損失函式便是你程式求得的結果和標準結果之間的誤差,損失函式具體公式如下 w值梯度下降公式 w w 學習速率 斜率 b值梯度下降公式 b b 學習速率 斜率 繪製的資...

深度學習入門筆記系列 三

本系列將分為 8 篇 今天是第三篇 主要講講感知器模型和 tensorboard 的基本使用方法 因為小詹之前寫過一篇感知器模型的介紹 這裡就不贅述了 tensorboard 是 tensorflow 自帶的視覺化結構管理和除錯優化網路的工具 在我們學習深度學習網路框架時 我們需要更直觀的看到各層網...

深度學習入門筆記系列 二

本系列將分為 8 篇 今天是第二篇 主要講講 tensorflow 框架的特點和此系列筆記中涉及到的入門概念 tensorflow 從單詞上可以分成 tensor 和 flow 兩個單詞 tensor 即張量 表明了其資料結構 flow 翻譯可理解為流 直觀的表達了張量之間通過計算相互轉化的過程 還...