# 思想:使损失函数MSE最小,拟合出的函数越准确 # 案例:假设你是一家餐厅的老板,考虑开一家分店,根据该城市的人口预测利润 import pandas as pd import numpy as np df = pd.read_csv('data.txt', header=None) print(df) # 取所有的人口转成数组 x = np.array(df.iloc[:, 0]) # print(x) # 取所有的利润转成数组 y = np.array(df.iloc[:, 1]) # print(y) # 样本量 N = len(x) # 斜率 w = 5 # 截距 b = -0.5 # 迭代次数 iteration = 10000 # 学习率 learning_rate = 0.0002 # 两次随时函数值的误差值 coef = 0.001 # 预测函数 def predict(): return w * x + b # 损失函数 def get_loss(): loss = 0 # 取预测值 y_predict = predict() # print(y_predict) # 通过损失函数求损失值 MSE loss = (1 / N) * np.sum([val ** 2 for val in (y - y_predict)]) print(loss) return loss # 梯度下降算法:分别对w,b求导 def get_gradient(): # 取所有的预测值 y_predict = predict() # 取当前的损失函数的值 loss = get_loss() # 分别对w,b求偏导 # 对b求导 b1 = -(2 / N) * sum(y - y_predict) # 对w求导 w1 = -(2 / N) * sum(x * (y - y_predict)) print(w1, b1) # 改变w和b w1 = w - learning_rate * w1 b1 = b - learning_rate * b1 return w1, b1, loss cost1 = 0 # 循环10000次 for i in range(iteration): # 使用梯度下降求最新的w,b w, b, loss = get_gradient() # 计算误差值 error = cost1 - loss # 如果误差值小于阈值就结束 if cost1 != 0 and error < coef: break; cost1 = loss print(f'w={w},b={b},loss={cost1}') # 输入该城市的人口,预测利润 y = w * 12 + b print(f'利润={y}')
实验三一元线性回归梯度下降算法(源代码)
于 2022-04-12 17:26:31 首次发布