機器學習演算法基礎 梯度下降法求一元線性回歸

2021-09-29 04:51:01 字數 1927 閱讀 7588

import numpy as np

import matplotlib.pyplot as plt

# 載入資料

data = np.genfromtxt("c:\\ml\\chapter-1\\data.csv",delimiter=",")

x_data = data[:,0]

y_data = data[:,1]

plt.scatter(x_data,y_data)

plt.show()

# 學習率 learning rate

lr = 0.0001

# 截距

b = 0

# 斜率

k = 0

# 最大迭代次數

epochs = 50

# 最小二乘法

def compute_error(b,k,x_data,y_data):

totalerror = 0

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

totalerror += (y_data[i] - (k*x_data[i]) + b) ** 2 #計算總的誤差

return totalerror / float(len(x_data)) / 2.0

def gradient_descent_runner(x_data,y_data,b,k,lr,epochs):

# 計算總資料量

m = float(len(x_data))

# 迴圈epochs次

for i in range(epochs):

b_grad = 0 # grad 梯度 求導

k_grad = 0

# 計算梯度的總和再求平均

for j in range(0,len(x_data)):

b_grad += -(1/m) * (y_data[j] - (k*x_data[j]) + b)

k_grad += -(1/m) * x_data[j] * (y_data[j] - ((k*x_data[j]) + b))

# 更新b和k

b = b - (lr * b_grad)

k = k - (lr * k_grad)

# 每迭代五次,輸出一次影象

if i % 5 == 0:

print("esochs:",i)

plt.plot(x_data,y_data,'b.')

plt.plot(x_data,k*x_data + b,"r")

plt.show()

return b,k

print('staring b = ,k = ,error = '.format(b,k,compute_error(b,k,x_data,y_data)))

print('running...')

b,k = gradient_descent_runner(x_data,y_data,b,k,lr,epochs) # 開始建模

print('after iterations b = ,k= ,error = '.format(epochs,b,k,compute_error(b,k,x_data,y_data)))

# 畫圖

# plt.plot(x_data,y_data,'b.') # b代表blue .表示用.畫出來

# plt.plot(x_data,k*x_data + b, 'r') # 畫線,r代表red

# plt.show()

資料的散點圖

根據梯度下降法求得線性回歸的過程

機器學習之梯度下降法 梯度下降法分析

梯度下降法的基本思想是函式沿著其梯度方向增加最快,反之,沿著其梯度反方向減小最快。在前面的線性回歸和邏輯回歸中,都採用了梯度下降法來求解。梯度下降的迭代公式為 j j j j 在回歸演算法的實驗中,梯度下降的步長 為0.01,當時也指出了該步長是通過多次時間找到的,且換一組資料後,演算法可能不收斂。...

機器學習 梯度下降法

梯度下降法,一般用來求解線性回歸方程,我的理解是根據一組形如 特徵1,特徵2.結果 的資料來找到這些對應的特徵和結果之間的聯絡 例如,我們利用一組 銷量的資料判斷乙個物品的銷量和 之間的關係 我們要求的線性回歸方程可以表示為 銷量 引數 實質上其實就是找到對應的 引數 而當影響乙個結果的特徵不只有乙...

機器學習 梯度下降法

1 梯度下降法的邏輯思路 的取值影響獲得最優解的速度 取值不合適,甚至得不到最優解 是梯度下降法的乙個超引數 一般需要調參找到最適合的 太小,減慢收斂學習速度 太大,導致不收斂 2 梯度下降法的問題 3 其它1 具體實現 模擬損失函式 y x 2.5 2 1 資料集特徵值 plot x np.lin...