pytorch 模拟关系拟合——回归实例

1. 概述

回归是机器学习重要的算法之一,其主要任务是通过样本数据拟合出一个函数来逼近真实的关系。在本文中,我们将会使用PyTorch模拟一个回归例子,以加深对于回归算法的理解。

2. 数据准备

本例中使用的是PyTorch内置的Boston Housing数据集,该数据集共有506个样本,每个样本包含13个特征和1个目标值(即房价)。我们将使用该数据集来拟合房价与其他13个特征之间的关系。

首先,需要导入数据集并将其分为训练集和测试集。

import torch

from sklearn.datasets import load_boston

from sklearn.model_selection import train_test_split

# 载入数据集

data = load_boston()

# 分割数据集

x_train, x_test, y_train, y_test = train_test_split(data.data, data.target, test_size=0.2, random_state=1)

# 转换为tensor格式

x_train = torch.tensor(x_train, dtype=torch.float32)

y_train = torch.tensor(y_train, dtype=torch.float32)

x_test = torch.tensor(x_test, dtype=torch.float32)

y_test = torch.tensor(y_test, dtype=torch.float32)

3. 模型搭建

接下来,我们将使用PyTorch来搭建一个简单的神经网络模型。在本例中,我们采用的是一个包含两个隐藏层的全连接神经网络,每个隐藏层包含64个神经元。

import torch.nn as nn

class Net(nn.Module):

def __init__(self):

super(Net, self).__init__()

self.fc1 = nn.Linear(13, 64)

self.fc2 = nn.Linear(64, 64)

self.fc3 = nn.Linear(64, 1)

def forward(self, x):

x = torch.relu(self.fc1(x))

x = torch.relu(self.fc2(x))

x = self.fc3(x)

return x

net = Net()

上述代码中定义了一个Net类,该类继承自nn.Module类。在该类中,我们定义了三个全连接层,分别为13个输入特征到64个隐藏层,64个隐藏层到64个隐藏层,64个隐藏层到1个输出。

4. 模型训练

在模型搭建完成后,我们需要训练该模型以拟合数据。训练模型的主要流程包括模型的前向传播和反向传播,以及参数的更新。具体而言,我们需要将输入的数据送入模型中,计算模型的输出与标签值之间的误差,然后将误差反向传播回模型中,最后利用优化算法更新模型参数。

import torch.optim as optim

# 定义优化器和损失函数

optimizer = optim.Adam(net.parameters(), lr=0.001)

criterion = nn.MSELoss()

# 训练模型

for epoch in range(1000):

optimizer.zero_grad()

output = net(x_train)

loss = criterion(output, y_train.reshape(-1, 1))

loss.backward()

optimizer.step()

if epoch % 100 == 0:

print('Epoch', epoch, 'Loss', loss.item())

在上述代码中,我们采用Adam优化算法以及均方误差损失函数来训练模型。在每个epoch迭代中,首先清空梯度信息,然后进行前向传播和反向传播,最后使用优化器进行参数的更新操作。打印出每100次迭代的损失。

5. 模型评估

完成模型的训练后,我们需要对其进行评估以获得其在测试集上的表现。在本例中,我们将利用均方误差以及R2得分来评估模型的性能。

from sklearn.metrics import mean_squared_error, r2_score

# 在测试集上进行预测

y_pred = net(x_test).detach().numpy()

# 计算均方误差和R2得分

mse = mean_squared_error(y_test, y_pred)

r2 = r2_score(y_test, y_pred)

print('MSE:', mse)

print('R2:', r2)

上述代码中,我们将模型在测试集上的预测结果与真实数据进行对比,得到对应的均方误差以及R2得分。均方误差越小,R2得分越接近1,说明模型的性能越好。

6. 结论

通过本文的实例,我们了解了如何使用PyTorch来模拟一个回归问题。在实现过程中,我们应用了PyTorch内置的Boston Housing数据集,并搭建了一个包含两个隐藏层的全连接神经网络模型,通过优化器和损失函数的组合进行模型的训练,并在测试集上对其进行了评估。结果显示,训练好的模型在测试集上表现良好,这也进一步说明了在实际应用环境中,回归算法具有较高的实用价值。

后端开发标签