PyTorch入门教程:从零构建多元回归模型(2026-07-07)

你是否曾好奇,机器如何从一堆数据中“学习”出规律?今天,我们用PyTorch——一个简单又强大的Python库——手把手构建一个多元回归模型。别怕,没有复杂的数学公式,只有生动比喻和可复现的代码。你只需一台电脑和一点点好奇心。

什么是多元回归?一个买房的小故事

想象你要买房子。房价不只取决于面积,还取决于卧室数量、地理位置、房龄……这就是“多元”的含义:用多个因素(特征)预测一个数值(房价)。多元回归就像一位聪明的房产中介,它根据历史数据,给每个特征配一个“权重”,最后加权求和得出预测价。

我们的案例:预测学生期末成绩

今天,我们用学习时长(小时)课后练习次数 两个特征,预测学生的期末考试成绩(满分100分)。我们用Python生成了一些假数据,让它看起来更真实。

import torch
import numpy as np

# 生成模拟数据:50名学生
np.random.seed(42)
hours = np.random.uniform(1, 10, 50)        # 学习时长 1-10小时
practices = np.random.randint(0, 10, 50)    # 练习 0-9次
scores = 60 + 3*hours + 2*practices + np.random.normal(0, 5, 50)  # 真实公式 + 噪声

# 转为PyTorch张量
X = torch.tensor(np.column_stack((hours, practices)), dtype=torch.float32)
y = torch.tensor(scores, dtype=torch.float32).reshape(-1, 1)

实用建议:初学者可以直接使用numpy生成假数据练习,但记得加上噪声(随机误差),否则模型会“死记硬背”而非真正学习。

构建模型:三步走,简单得像搭积木

1. 定义模型类

我们继承nn.Module,它像一个乐高底板——你只需添加模块。

import torch.nn as nn

class MultiLinearRegression(nn.Module):
    def __init__(self):
        super().__init__()
        self.linear = nn.Linear(2, 1)  # 输入2个特征,输出1个值

    def forward(self, x):
        return self.linear(x)

2. 选择损失函数和优化器

model = MultiLinearRegression()
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

3. 训练循环:让模型“开窍”

重复以下步骤1000次(一个epoch就是一次全遍历):

epochs = 1000
for epoch in range(epochs):
    # 前向传播:预测
    predictions = model(X)
    loss = criterion(predictions, y)

    # 反向传播:计算梯度
    optimizer.zero_grad()
    loss.backward()

    # 更新权重:沿梯度下降方向走一小步
    optimizer.step()

    if (epoch+1) % 200 == 0:
        print(f'Epoch {epoch+1}, Loss: {loss.item():.4f}')

运行后,你会看到损失从最初的几千逐渐降到个位数。魔法开始发生了

实战结果与解读

训练结束后,你可以查看模型学到的权重:

[w, b] = model.parameters()
print(f'权重:{w.data.numpy()}, 偏置:{b.data.numpy()}')

你会发现权重接近我们生成数据时用的 [3, 2],偏置接近 60。这意味着模型说:“每多学1小时,成绩加3分;每多做1次练习,成绩加2分;基础分60。”——这和我们的设定几乎一致!

给你的行动号召

恭喜,你已经亲手搭建了第一个多元回归模型!但学习不止于此:试着增加特征(比如出勤率)、更换优化器(Adam效果更佳)、或者用真实数据集(如Kaggle的波士顿房价)挑战自己。

现在,打开你的Python环境,复现下面的代码,然后改动一处(比如学习率从0.01改成0.1),观察损失曲线有何变化? 下次我们将深入讲解如何可视化训练过程。


免责声明:本文内容仅供教育和学习目的。生成数据和结论仅用于示例,不构成任何实际预测或投资建议。实际模型表现取决于数据质量与特征选择,请遵守相关法律法规,在适用范围内使用本教程。