基因表达量预测患者患病状态:使用PyTorch构建神经网络模型
使用PyTorch构建神经网络模型,根据基因表达量预测患者患病状态
本项目使用Python和PyTorch框架构建神经网络模型,根据基因表达量预测患者是否患病。模型利用训练集和测试集进行训练和评估,并输出每次训练的准确率、损失值和测试集的概率。
项目要求:
- 读入Excel表格,第一行为患者状态标志state(1为患病,0为正常)和8个基因名称,第0列为患者是否患病的真值,其余列为基因的表达量。
- 读入训练集:路径为'C:\Users\lenovo\Desktop\HIV\PAH三个数据集\selected_genes.xlsx'。
- 读入测试集:路径为'C:\Users\lenovo\Desktop\HIV\DNN神经网络测试\output_data1.xlsx'。
- 模型为二分类模型,即是否患病,1个隐藏层,4个神经元。
- 测试集参与模型的训练,以便及时调整模型中的参数。
- 给出详细注释。
- 将每次训练的训练集的准确率和训练集的损失值以及测试集的准确率和测试集的损失值进行输出。
- 使用PyTorch框架。
- 输出最后一次训练得到每个样本的概率。
代码实现:
import torch
import torch.nn as nn
import pandas as pd
# 读取训练集和测试集数据
train_data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\PAH三个数据集\selected_genes.xlsx', index_col=0)
test_data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\DNN神经网络测试\output_data1.xlsx', index_col=0)
# 将训练集和测试集数据分别转换为tensor
train_x = torch.tensor(train_data.iloc[:, 1:].values, dtype=torch.float32)
train_y = torch.tensor(train_data.iloc[:, 0].values, dtype=torch.float32).view(-1, 1)
test_x = torch.tensor(test_data.iloc[:, 1:].values, dtype=torch.float32)
test_y = torch.tensor(test_data.iloc[:, 0].values, dtype=torch.float32).view(-1, 1)
# 定义神经网络模型
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.sigmoid(self.fc1(x))
x = self.sigmoid(self.fc2(x))
return x
# 定义训练函数
def train(model, train_x, train_y, test_x, test_y, optimizer, criterion, epochs):
for epoch in range(epochs):
# 将训练集和测试集输入模型进行预测
train_output = model(train_x)
test_output = model(test_x)
# 计算训练集和测试集的损失值
train_loss = criterion(train_output, train_y)
test_loss = criterion(test_output, test_y)
# 将损失值进行反向传播,更新参数
optimizer.zero_grad()
train_loss.backward()
optimizer.step()
# 计算训练集和测试集的准确率
train_pred = (train_output > 0.5).float()
test_pred = (test_output > 0.5).float()
train_acc = (train_pred == train_y).float().mean()
test_acc = (test_pred == test_y).float().mean()
# 输出训练过程中的相关信息
print('Epoch [{}/{}], Train Loss: {:.4f}, Train Acc: {:.4f}, Test Loss: {:.4f}, Test Acc: {:.4f}'
.format(epoch+1, epochs, train_loss.item(), train_acc.item(), test_loss.item(), test_acc.item()))
# 输出测试集每个样本的概率
test_prob = model(test_x)
print('Test Prob: ', test_prob.detach().numpy())
# 实例化模型、损失函数和优化器
model = Net()
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
# 调用训练函数进行模型训练
train(model, train_x, train_y, test_x, test_y, optimizer, criterion, epochs=100)
代码说明:
- 首先读取训练集和测试集数据,并将其转换为tensor格式。
- 定义神经网络模型,包含一个输入层、一个隐藏层和一个输出层。
- 定义训练函数,包含模型训练、损失计算、参数更新、准确率计算和结果输出等步骤。
- 实例化模型、损失函数和优化器。
- 调用训练函数进行模型训练,并输出训练过程中的相关信息以及测试集每个样本的概率。
总结:
本项目使用PyTorch框架构建神经网络模型,成功实现了根据基因表达量预测患者是否患病的功能。该模型利用训练集和测试集进行训练和评估,并输出每次训练的准确率、损失值和测试集的概率。该项目为利用基因表达量进行疾病预测提供了有效的解决方案。
原文地址: https://www.cveoy.top/t/topic/nfsA 著作权归作者所有。请勿转载和采集!