用PyTorch实现Logistic回归
时间: 2024-02-12 15:30:11 浏览: 80
基于pytorch的logistic与softmax回归模型python代码
以下是使用PyTorch实现Logistic回归的示例代码:
```
import torch
import torch.nn as nn
import torch.optim as optim
# 定义数据集
x_data = [[1.0], [2.0], [3.0], [4.0], [5.0], [6.0], [7.0], [8.0]]
y_data = [[0.], [0.], [0.], [0.], [1.], [1.], [1.], [1.]]
# 转化为Tensor
x_train = torch.FloatTensor(x_data)
y_train = torch.FloatTensor(y_data)
# 定义模型
class LogisticRegression(nn.Module):
def __init__(self):
super(LogisticRegression, self).__init__()
self.linear = nn.Linear(1, 1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.linear(x)
x = self.sigmoid(x)
return x
# 初始化模型和优化器
model = LogisticRegression()
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 训练模型
for epoch in range(1000):
# 前向传播
hypothesis = model(x_train)
# 计算损失函数
loss = nn.BCELoss()(hypothesis, y_train)
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 打印损失函数
if epoch % 100 == 0:
print('Epoch {:4d}/{} Loss: {:.6f}'.format(
epoch, 1000, loss.item()
))
# 测试模型
with torch.no_grad():
hypothesis = model(x_train)
predicted = (hypothesis > 0.5).float()
accuracy = (predicted == y_train).float().mean()
print('Accuracy: {:.2f}%'.format(accuracy * 100))
```
在这个示例中,我们使用单变量的数据集,将其转化为PyTorch Tensor,并定义了一个名为`LogisticRegression`的模型。该模型有一个线性层和一个sigmoid激活函数。我们使用BCELoss作为损失函数,使用随机梯度下降(SGD)优化器进行训练。在训练过程中,我们使用`optimizer.zero_grad()`将梯度归零,使用`loss.backward()`计算梯度,使用`optimizer.step()`对模型参数进行更新。最后,我们使用测试数据集对模型进行测试,并计算准确率。
阅读全文