基于基因表达量的疾病预测:使用 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))

代码说明

  1. 数据读取: 使用 pandas 读取 Excel 文件,将数据转换为 numpy 数组,并分别划分训练集和测试集。
  2. 数据预处理: 将 numpy 数组转换为 PyTorch 的 tensor,并将标签数据转换为一维向量。
  3. 模型定义: 定义一个包含两个全连接层和一个 sigmoid 激活函数的简单神经网络。
  4. 损失函数和优化器: 使用二元交叉熵损失函数 (BCELoss) 和随机梯度下降优化器 (SGD) 进行训练。
  5. 训练过程: 循环遍历训练集,进行前向传播、计算损失、反向传播和参数更新。
  6. 测试过程: 使用训练好的模型对测试集进行预测,并计算测试集的准确率和损失。

总结

本代码演示了使用 PyTorch 构建一个简单的基因表达量疾病预测模型。该模型可以进一步改进,例如使用更多隐藏层、不同的激活函数或优化器。此外,也可以使用交叉验证等方法来提高模型的泛化能力。

注意: 代码中的文件路径需要根据实际情况进行修改。

基于基因表达量的疾病预测:使用 PyTorch 构建神经网络

原文地址: http://www.cveoy.top/t/topic/nfrY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录