-
实验概述# 思想:使损失函数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]) # 取所有的利润转成数组 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}') # 输入该城市的人口,预测利润 print("输入人口数量:", end='') num = eval(input()) y = w * num + b print(f'利润={y}')
- 实验目标和主要内容
实验目标:设计一元线性回归梯度下降算法,拟合函数预测模型。
开发平台:PyCharm Community Edition 2021.3.2 x64
语言:Python
主要内容:
-
-
- 假设你是一家餐厅的老板,考虑开一家分店,根据该城市的人口和利润数据和一元线性回归梯度下降算法拟合人口和利润的预测函数模型进行预测。
-
- 实验设计
2.1关键算法分析
算法1:将数据转化为数组形式
代码:
算法2:设置一元线性回归模型的初始参数
代码:
算法3:获取预测函数和损失函数
代码:
算法4:梯度下降算法
代码:
算法5:调用梯度下降算法
代码:
算法8:进行预测
代码:
- 程序运行结果分析
通过一元线性回归梯度下降算法,得到的斜率b、截距w和损失函数MSE的最小值loss,以及根据该城市的人口预测的利润:
- 总结
4.1 实验的难点和关键点
- 梯度下降算法初始参数的设置;
- 损失函数获取;
- 梯度下降算法的运用。
- 心得体会
- 掌握了一元线性回归模型的建立;
- 了解并运用了梯度下降算法;
- 学习了如何建立损失函数。