基于基因表达量的疾病预测:使用 PyTorch 构建神经网络
基于基因表达量的疾病预测:使用 PyTorch 构建神经网络
本代码使用 Python 和 PyTorch 框架构建一个神经网络模型,根据基因表达量来预测患者是否患病。该模型使用二分类方法,包含一个隐藏层,并提供详细的代码注释和训练过程输出。
代码实现
import torch
import torch.nn as nn
import pandas as pd
import numpy as np
# 定义神经网络
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
# 读取数据
train_data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\DNN神经网络测试\output_data.xlsx')
test_data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\DNN神经网络测试\output_data1.xlsx')
# 将数据转换为numpy数组
train_data = np.array(train_data)
test_data = np.array(test_data)
# 将数据分为输入和输出
x_train = train_data[:, 1:]
y_train = train_data[:, 0]
x_test = test_data[:, 1:]
y_test = test_data[:, 0]
# 将numpy数组转换为tensor
x_train = torch.tensor(x_train, dtype=torch.float32)
y_train = torch.tensor(y_train, dtype=torch.float32).view(-1, 1)
x_test = torch.tensor(x_test, dtype=torch.float32)
y_test = torch.tensor(y_test, dtype=torch.float32).view(-1, 1)
# 定义模型、损失函数和优化器
net = Net()
criterion = nn.BCELoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.1)
# 训练模型
for epoch in range(1000):
# 前向传播
y_pred = net(x_train)
# 计算损失
loss = criterion(y_pred, y_train)
# 反向传播
optimizer.zero_grad()
loss.backward()
optimizer.step()
# 计算准确率
y_pred = (y_pred > 0.5).float()
accuracy = (y_pred == y_train).float().mean()
# 输出训练过程
if (epoch+1) % 100 == 0:
print('Epoch [{}/{}], Loss: {:.4f}, Accuracy: {:.4f}'.format(epoch+1, 1000, loss.item(), accuracy.item()))
# 输出测试集的预测结果
y_pred_test = net(x_test)
y_pred_test = y_pred_test.detach().numpy()
print('Test Set Predictions: ')
print(y_pred_test)
# 输出测试集的准确率和损失
loss_test = criterion(torch.tensor(y_pred_test, dtype=torch.float32), y_test)
y_pred_test = (y_pred_test > 0.5).astype(int)
accuracy_test = (y_pred_test == y_test.numpy().astype(int)).mean()
print('Test Set Loss: {:.4f}, Accuracy: {:.4f}'.format(loss_test.item(), accuracy_test))
代码说明
- 数据读取: 使用 pandas 读取 Excel 文件,将数据转换为 numpy 数组,并分别划分训练集和测试集。
- 数据预处理: 将 numpy 数组转换为 PyTorch 的 tensor,并将标签数据转换为一维向量。
- 模型定义: 定义一个包含两个全连接层和一个 sigmoid 激活函数的简单神经网络。
- 损失函数和优化器: 使用二元交叉熵损失函数 (BCELoss) 和随机梯度下降优化器 (SGD) 进行训练。
- 训练过程: 循环遍历训练集,进行前向传播、计算损失、反向传播和参数更新。
- 测试过程: 使用训练好的模型对测试集进行预测,并计算测试集的准确率和损失。
总结
本代码演示了使用 PyTorch 构建一个简单的基因表达量疾病预测模型。该模型可以进一步改进,例如使用更多隐藏层、不同的激活函数或优化器。此外,也可以使用交叉验证等方法来提高模型的泛化能力。
注意: 代码中的文件路径需要根据实际情况进行修改。
原文地址: http://www.cveoy.top/t/topic/nfrY 著作权归作者所有。请勿转载和采集!