PyTorch入门教程:从零构建多元回归模型(2026-07-24)
机器学习的世界里,回归是最基础也最强大的武器。今天,我们用一个真实的房价预测案例,带你从零构建一个多元回归模型。不需要数学博士,只需要一点代码动手能力。
为什么选择PyTorch?
PyTorch不仅是学术界宠儿,在工业界也占据半壁江山。它的优势在于:
- 动态计算图:调试友好,像写普通Python一样写神经网络
- 自动求导:无需手动计算梯度
- GPU加速:一行代码即可利用显卡算力
核心概念快速扫盲
多元回归是什么?
简单回归用一条直线拟合“x→y”,多元回归则是用多维空间中的超平面来拟合多个输入变量和一个输出变量。
公式:
y = w1*x1 + w2*x2 + ... + wn*xn + b
其中权重w和偏置b就是要学习的参数。
PyTorch张量与自动微分
在PyTorch中,数据都存储在Tensor里。设置requires_grad=True后,所有运算都会被记录,方便后续反向传播求梯度。
import torch
# 创建一个可训练的参数(学习会修改它)
w = torch.randn(3, requires_grad=True)
b = torch.zeros(1, requires_grad=True)
案例:预测波士顿房价简化版
数据准备
我们模拟一个微型数据集:3个特征(房间数、年龄、交通指数),1个目标(房价/10万美元)。
# 生成模拟数据(真实场景应从CSV加载)
X = torch.randn(100, 3) # 100个样本,3个特征
y_true = 2 * X[:,0] - 1.5 * X[:,1] + 0.8 * X[:,2] + 3 + 0.1*torch.randn(100)
构建模型(两种方式)
方式一:手动定义参数(适合理解原理)
w = torch.randn(3, requires_grad=True)
b = torch.zeros(1, requires_grad=True)
def model(X):
return X @ w + b # @是矩阵乘法
# 训练循环
lr = 0.01
for epoch in range(500):
y_pred = model(X)
loss = ((y_pred - y_true)**2).mean() # MSE损失
loss.backward() # 自动计算梯度
with torch.no_grad(): # 更新参数时不记录梯度
w -= lr * w.grad
b -= lr * b.grad
w.grad.zero_()
b.grad.zero_()
if epoch % 100 == 0:
print(f"Epoch {epoch}, Loss: {loss.item():.4f}")
方式二:使用nn.Module(推荐实践)
import torch.nn as nn
class LinearRegression(nn.Module):
def __init__(self, input_dim):
super().__init__()
self.linear = nn.Linear(input_dim, 1)
def forward(self, x):
return self.linear(x)
model = LinearRegression(3)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
loss_fn = nn.MSELoss()
for epoch in range(500):
y_pred = model(X)
loss = loss_fn(y_pred, y_true.view(-1,1))
optimizer.zero_grad()
loss.backward()
optimizer.step()
实用建议:防止踩坑
数据预处理是关键
- 标准化:不同特征量级差异大(如房间数2-10,交通指数0-100),会导致梯度震荡。使用
sklearn.preprocessing.StandardScaler统一缩放 - 检查NaN:训练前确认无缺失值,
X.isnan().any()快速排查
学习率调优技巧
- 默认试错法:从0.01开始,Loss不减半则除以10
- 学习率调度器:
torch.optim.lr_scheduler.StepLR可在指定epoch后降低学习率
验证你的模型
不要只看训练Loss!留出20%数据做测试集,比较R²得分是否接近训练表现。过拟合(训练好测试差)时需要增加数据或减小模型复杂度。
行动号召
今天就开始动手吧! 复制上面的完整代码到Jupyter Notebook,把模拟数据替换成你身边的真实数据——比如你家附近的房价、学生考试成绩等。30分钟后,你会发现多元回归没有想象中那么难。
📝 下一站挑战:尝试加入一个非线性激活函数(如ReLU),让模型变成神经网络,预测能力直接翻倍。
免责声明:本文提供的代码仅为教学示例,用于说明PyTorch与多元回归的基本原理。实际应用中的金融预测、价格估算等场景需考虑更多复杂变量与风险管理。作者不对因使用本文代码而导致的任何直接或间接损失承担责任。机器学习模型应谨慎部署,建议在专业指导下进行生产级应用。