多重线性回归模型是一种监督学习算法,可用于根据多个输入变量x
预测目标变量y
。这是一个线性回归问题,其中使用多个输入变量x
或特征来预测目标变量y
。该算法的一个典型用例是根据房屋的大小、房间数量和房龄来预测房价。
在之前的教程中,我们专注于简单线性回归,其中我们只使用一个变量x
来预测目标变量y
。从现在开始,我们将使用多个输入变量进行预测。虽然本教程只关注从多个输入变量x
中进行单个输出预测y
,但在随后的教程中,我们将向您介绍多输入-多输出回归问题。通常,在实际场景中会采用相同的做法来构建更复杂的神经网络架构。
本教程将展示如何在 PyTorch 中实现一个多
线性回归模型。具体来说,您将学习
- 如何回顾多维线性回归。
- 如何使用 PyTorch 进行多重线性回归模型预测。
- 如何在 PyTorch 中使用
Linear
类进行多重线性回归。 - 如何在 PyTorch 中使用
nn.Module
构建自定义模块。
通过我的《用PyTorch进行深度学习》一书来启动你的项目。它提供了包含可用代码的自学教程。
让我们开始吧。

使用 PyTorch 中的优化器。
图片来源:Mark Boss。保留部分权利。
概述
本教程分为三个部分;它们是
- 准备预测数据
- 使用
Linear
类进行多重线性回归 - 可视化结果
准备预测数据
与简单线性回归模型的情况一样,让我们为模型初始化权重和偏差。请注意,我们对权重和偏差使用了多维张量,因为我们将使用多个输入变量。
1 2 3 4 5 6 7 |
import torch torch.manual_seed(42) # 设置权重和偏差 w = torch.tensor([[3.0], [4.0]], requires_grad=True) b = torch.tensor([[1.0]], requires_grad=True) |
接下来,我们将定义用于预测的前向函数。之前我们使用标量乘法,但这里我们使用 PyTorch 的mm
函数进行矩阵乘法。此函数实现了具有多个输入变量的线性方程。请注意,多维张量是矩阵,需要遵循一些规则,例如矩阵乘法。我们稍后将对此进行更多讨论。
1 2 3 4 5 |
# 定义用于预测的前向函数 def forward(x): # 使用 mm 模块进行矩阵乘法 y_pred = torch.mm(x, w) + b return y_pred |
现在我们已经初始化了权重和偏差,并构建了一个用于预测的前向函数,让我们为输入变量定义一个张量x
。
1 2 3 4 5 6 |
# 定义张量 'x' x = torch.tensor([[2.0, 4.0]]) # 使用前向函数预测值 y_pred = forward(x) # 显示结果 print("打印预测结果: ", y_pred) |
输出如下:
1 |
打印预测结果: tensor([[23.]], grad_fn=<AddBackward0>) |
请注意,在矩阵乘法torch.mm(x, w)
中,矩阵x
的列数必须等于w
的行数。在本例中,我们有一个$1\times 2$的x
张量和一个$2\times 1$的w
张量,矩阵乘法后得到一个$1\times 1$的张量。
同样,我们可以将线性方程应用于多个样本。例如,让我们创建一个张量X
,其中每一行代表一个样本。
1 2 3 4 |
# 定义具有多行的张量 'X' X = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) |
为了进行预测,我们将使用与上面相同的函数。
1 2 3 |
# 对多维张量“X”进行预测 y_pred = forward(X) print("对 'X' 的预测: ", y_pred) |
它会打印:
1 2 3 |
对 'X' 的预测: tensor([[12.], [26.], [40.]], grad_fn=<AddBackward0>) |
如您所见,我们已经获得了多个输入变量的结果。
使用Linear
类进行多重线性回归
我们无需从头编写函数,而是可以使用 PyTorch 自带的内置类Linear
进行预测。这在构建复杂而强大的模型架构时更为有用。
让我们创建一个Linear
模型,并对上面定义的相同张量X
进行预测。这里我们将定义两个参数:
in_features
:表示输入变量X
的数量和模型权重的数量,本例中为 2。out_features
:表示输出/预测值的数量,本例中为 1。
1 2 |
# 使用 PyTorch 自带的内置函数定义 LR 模型 lr_model = torch.nn.Linear(in_features=2, out_features=1) |
现在,让我们使用我们的lr_model
对象,用随机初始化的权重和偏差对X
进行预测。
1 2 3 |
# 对 X 进行预测 y_pred = lr_model(X) print("对 'X' 的预测: ", y_pred) |
本例中的输出如下:
1 2 3 |
对 'X' 的预测: tensor([[-0.5754], [-1.2430], [-1.9106]], grad_fn=<AddmmBackward0>) |
请注意输出的形状,而不是值。这与我们使用矩阵乘法时的情况相同。
想开始使用PyTorch进行深度学习吗?
立即参加我的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
使用nn.Module
创建自定义模块
或者,我们也可以为我们的线性模型创建自定义模块。虽然目前这可能看起来多余,但在我们构建最先进的神经网络时,这可能是必需的。
请注意,自定义模块是对象和类。在本例中,我们将定义一个线性回归类LR
,并使其成为nn.Module
包的子类。因此,nn.Module
包中的所有方法和属性都将被继承。
我们将在构造函数的参数中定义输入和输出的大小,即input_features
和output_features
。此外,我们将在对象构造函数中调用super()
,这使我们能够使用父类nn.Module
中的方法和属性。现在我们可以使用torch.nn.Linear
对象并在其中定义参数input_features
和output_features
。
最后,为了进行预测,我们将定义forward
函数。
1 2 3 4 5 6 7 8 9 10 11 |
... # 使用 'nn.Module' 包创建自定义模块 class LR(torch.nn.Module): # 对象构造函数 def __init__(self, input_features, output_features): super().__init__() self.linear = torch.nn.Linear(input_features, output_features) # 定义用于预测的前向函数 def forward(self, x): y_pred = self.linear(x) return y_pred |
我们将以两个输入和一个输出的方式构建我们的线性回归模型,如下所示。
1 2 |
# 构建模型对象 LR_model = LR(2, 1) |
现在,让我们再次使用我们的自定义模块对具有多个输入样本的张量X
进行预测。
1 2 3 |
# 对 'X' 的多个输入样本进行预测 y_pred = LR_model(X) print("对 'X' 的预测: ", y_pred) |
它会打印:
1 2 3 |
对 'X' 的预测: tensor([[0.3405], [0.5596], [0.7787]], grad_fn=<AddmmBackward0>) |
使用parameters()
方法,我们可以获取随机初始化参数的列表。
1 |
print(list(LR_model.parameters())) |
它会打印:
1 2 3 |
[参数 包含: 张量([[ 0.6496, -0.1549]], requires_grad=True), 参数 包含: 张量([0.1427], requires_grad=True)] |
或者,我们也可以使用state_dict()
方法来检查模型的参数。
综合起来,以下是创建不同多重线性回归模型的完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import torch # 设置权重和偏差 w = torch.tensor([[3.0], [4.0]], requires_grad=True) b = torch.tensor([[1.0]], requires_grad=True) # 定义用于预测的前向函数 def forward(x): # 使用 .mm 模块进行矩阵乘法 y_pred = torch.mm(x, w) + b return y_pred # 定义张量 'x' x = torch.tensor([[2.0, 4.0]]) # 使用前向函数预测值 y_pred = forward(x) # 显示结果 print("打印预测结果: ", y_pred) # 定义具有多行的张量 'X' X = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]) # 对多维张量“X”进行预测 y_pred = forward(X) print("对 'X' 的预测: ", y_pred) # 使用 PyTorch 自带的内置函数定义 LR 模型 lr_model = torch.nn.Linear(in_features=2, out_features=1) # 对 X 进行预测 y_pred = lr_model(X) print("对 'X' 的预测: ", y_pred) # 使用 'nn.Module' 包创建自定义模块 class LR(torch.nn.Module): # 对象构造函数 def __init__(self, input_features, output_features): super().__init__() self.linear = torch.nn.Linear(input_features, output_features) # 定义用于预测的前向函数 def forward(self, x): y_pred = self.linear(x) return y_pred # 构建模型对象 LR_model = LR(2, 1) # 对 'X' 的多个输入样本进行预测 y_pred = LR_model(X) print("对 'X' 的预测: ", y_pred) print(list(LR_model.parameters())) |
总结
在本教程中,您学习了如何使用多重线性回归模型进行预测。具体来说,您学习了
- 如何回顾多维线性回归。
- 如何使用 PyTorch 进行多重线性回归模型预测。
- 如何在 PyTorch 中使用
Linear
类进行多重线性回归。 - 如何在 PyTorch 中使用
nn.Module
构建自定义模块。
我是加纳一所大学的博士生。我的研究方向是机器学习在金融领域的应用。我需要一些书籍和专家的帮助。
谢谢
嗨,George……以下地点是您机器学习之旅的一个绝佳起点!
https://machinelearning.org.cn/start-here/