机器学习算法基础——梯度下降法求一元线性回归

mac2024-01-29  36

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 = {0},k = {1},error = {2}'.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 {0} iterations b = {1},k= {2},error = {3}'.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()

数据的散点图 根据梯度下降法求得线性回归的过程

最新回复(0)