基于 PyTorch 的二分类模型构建和评估:以 HIV 和 PAH 数据集为例
本代码使用 PyTorch 构建了一个基于神经网络的二分类模型,并以 HIV 和 PAH 数据集为例进行模型训练和评估。代码展示了数据预处理、模型定义、训练过程、测试集评估等步骤。
import torch
import torch.nn as nn
import torch.optim as optim
import pandas as pd
from sklearn.preprocessing import StandardScaler
# 读入数据
train_data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\PAH三个数据集\selected_genes.xlsx')
test_data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\PAH三个数据集\GSE53408 对应lasso基因.xlsx')
# 标准化数据
scaler = StandardScaler()
train_data.iloc[:, 1:] = scaler.fit_transform(train_data.iloc[:, 1:])
test_data.iloc[:, 1:] = scaler.transform(test_data.iloc[:, 1:])
# 划分特征和标签
train_x = train_data.iloc[:, 1:].values
train_y = train_data.iloc[:, 0].values
test_x = test_data.iloc[:, 1:].values
test_y = test_data.iloc[:, 0].values
# 转换为tensor
train_x = torch.from_numpy(train_x).float()
train_y = torch.from_numpy(train_y).unsqueeze(1).float()
test_x = torch.from_numpy(test_x).float()
test_y = torch.from_numpy(test_y).unsqueeze(1).float()
# 定义模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(8, 4)
self.fc2 = nn.Linear(4, 1)
self.sigmoid = nn.Sigmoid()
def forward(self, x):
x = self.fc1(x)
x = self.sigmoid(x)
x = self.fc2(x)
x = self.sigmoid(x)
return x
# 初始化模型、损失函数和优化器
net = Net()
criterion = nn.BCELoss()
optimizer = optim.Adam(net.parameters(), lr=0.01)
# 训练模型
for epoch in range(1000):
optimizer.zero_grad()
outputs = net(train_x)
loss = criterion(outputs, train_y)
loss.backward()
optimizer.step()
if (epoch + 1) % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch + 1, 1000, loss.item()))
# 输出每个样本的预测概率
with torch.no_grad():
outputs = net(test_x)
probabilities = outputs.numpy().squeeze()
# 输出测试集的准确率和损失值
test_loss = criterion(outputs, test_y)
predicted = (outputs > 0.5).float()
accuracy = (predicted == test_y).float().mean()
print('Test Loss: {:.4f}, Accuracy: {:.4f}'.format(test_loss.item(), accuracy.item()))
上述代码的测试集参与训练了吗?
没有参与训练,因为训练过程中使用的是 `train_x` 和 `train_y` 作为输入和标签,而没有使用 `test_x` 和 `test_y`。测试集只在训练结束后被用来评估模型的性能。
代码功能解析:
- 数据预处理:
- 使用
pandas读取 Excel 数据集。 - 使用
StandardScaler对特征数据进行标准化。
- 使用
- 模型定义:
- 定义一个名为
Net的神经网络模型,包含两个全连接层和两个 sigmoid 激活函数。
- 定义一个名为
- 训练模型:
- 使用
Adam优化器和BCELoss损失函数进行模型训练。 - 在训练过程中,每 100 个 epoch 打印一次损失值。
- 使用
- 评估模型:
- 使用测试集
test_x和test_y评估模型的性能,计算测试集的损失值和准确率。
- 使用测试集
代码总结:
本代码展示了使用 PyTorch 构建和评估一个二分类模型的完整流程,包括数据预处理、模型定义、训练、测试等步骤。该模型可以用于预测 HIV 和 PAH 等疾病的可能性。
扩展阅读:
原文地址: https://www.cveoy.top/t/topic/nfsl 著作权归作者所有。请勿转载和采集!