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...