本文是学习线性回归模型的总结,主要分享线性回归模型的技术原理,以及用代码实现验证,供大家参考。
一、任务描述
假设手上有一份数据集,每一行数据表示一个物品的价格影响因素(k个)和对应价格。
序号 |
影响因素1 |
影响因素2 |
影响因素k |
价格(y) |
1 |
1.23 |
3.23 |
1.56 |
7.23 |
2 |
0.23 |
1.60 |
2.56 |
8.33 |
... |
... |
... |
... |
... |
1000 |
xx |
xx |
xx |
xx |
现在获得了该物品的k个影响因素,要求根据k个影响因素求取该物品的价格。
二、任务分析
1、目标
那么我们的任务就是寻找一组参数W和b,使得根据线性回归模型做出的价格预测尽可能接近数据里的真实价格。
2、评估
如何评估找到的一组参数W和b,就是使得根据线性回归模型做出的价格预测尽可能接近数据里的真实价格。
在深度学习中,损失函数(loss function)能够量化目标的实际值与预测值之间的差距。回归问题中最常用的损失函数是平方误差函数,那么第i个样本的损失为:
因此,在训练模型时,我们希望寻找一组参数(W,b),使得L(W,b)在所有训练样本上的损失均值越小越好。
3、求解
在深度学习中,求解参数(W,b),一般用梯度下降法。梯度下降算法的步骤如下:
(1)初始化模型参数的值;(2)从数据集中随机抽取小批量样本且在负梯度的方向上更新参数,并不断迭代这一步骤,直到迭代次数达到设定阈值或损失小于某个阈值。
W和b的更新表达式如下:
批量大小和学习率的值通常是预先指定,而不是通过模型训练得到的,这些可以调整但不在训练过程中更新的参数称为超参数(hyperparameter),所谓的调参就是选择超参数的过程。
三、代码验证
整个代码验证过程包括如下主要流程:
1、获取训练数据
为验证线性回归模型,我们定义一个线性函数,生成一个数据集。
为从n个样本数据中抽取小批量数据,定义个批量数据迭代器
2、定义模型
根据上述表达式定义线性回归模型。
3、定义损失函数
根据上述表达式定义损失函数。
4、定义优化算法
根据上述表达式定义优化算法。
5、初始化训练参数
首先初始化模型参数。
6、训练
训练结束后,可以查看W和b的参数,以及与真实值W和b的差异
运行结果
参考资料
1、《动手学深度学习》第二版,地址: zh.d2l.ai/index.html