该代码使用PyTorch构建一个简单的二分类神经网络模型,用于预测基因表达量与疾病状态之间的关系。

首先,代码从Excel表格中读取训练集和测试集数据,包括基因表达量和疾病状态标签。然后,将数据转换为PyTorch的tensor类型,并对基因表达量进行标准化处理。

接下来,定义了一个包含两个隐藏层和sigmoid激活函数的简单神经网络模型。模型使用二元交叉熵损失函数和随机梯度下降优化器进行训练。

训练过程中,代码使用训练集进行模型参数更新,并使用测试集评估模型的泛化能力。代码输出每个训练轮次的训练集和测试集的损失值和准确率,以及测试集样本的预测概率。

需要注意的是,代码中的测试集没有参与模型的训练过程。在模型训练时,只使用了训练集进行参数更新,测试集仅仅用于评估模型的泛化性能。

代码示例:

import torch
import torch.nn as nn
import torch.optim as optim
import pandas as pd
from sklearn.preprocessing import StandardScaler

# 读入Excel表格
data_train = pd.read_excel(r'C:\Users\lenovo\Desktop\HIV\PAH三个数据集\selected_genes.xlsx')
data_test = pd.read_excel(r'C:\Users\lenovo\Desktop\HIV\PAH三个数据集\GSE53408 对应lasso基因.xlsx')

# 将state列转换为tensor类型
train_labels = torch.tensor(data_train['state'].values)
test_labels = torch.tensor(data_test['state'].values)

# 将基因表达量转换为tensor类型
train_features = torch.tensor(data_train.iloc[:, 1:].values)
test_features = torch.tensor(data_test.iloc[:, 1:].values)

# 数据标准化
scaler = StandardScaler()
train_features = scaler.fit_transform(train_features.numpy())
test_features = scaler.transform(test_features.numpy())

# 将标准化后的数据转换为tensor类型
train_features = torch.tensor(train_features)
test_features = torch.tensor(test_features)

# 定义神经网络模型
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.SGD(net.parameters(), lr=0.1)

# 训练模型
for epoch in range(100):
    # 将训练集的特征和标签传入模型并计算出模型的预测值
    outputs = net(train_features.float())
    # 计算损失
    loss = criterion(outputs.squeeze(), train_labels.float())
    # 梯度清零
    optimizer.zero_grad()
    # 反向传播
    loss.backward()
    # 更新参数
    optimizer.step()

    # 计算训练集准确率和损失值
    train_outputs = net(train_features.float())
    train_loss = criterion(train_outputs.squeeze(), train_labels.float())
    train_acc = ((train_outputs > 0.5).float() == train_labels).float().mean()

    # 计算测试集准确率和损失值
    test_outputs = net(test_features.float())
    test_loss = criterion(test_outputs.squeeze(), test_labels.float())
    test_acc = ((test_outputs > 0.5).float() == test_labels).float().mean()

    # 输出训练过程中的损失和准确率
    print('Epoch [{}/{}], Train Loss: {:.4f}, Train Acc: {:.2f}%, Test Loss: {:.4f}, Test Acc: {:.2f}%'
          .format(epoch + 1, 100, train_loss.item(), train_acc * 100, test_loss.item(), test_acc * 100))

# 输出每个样本的概率
outputs = net(test_features.float())
probabilities = torch.sigmoid(outputs)
print(probabilities)

代码中,训练集用于模型参数的更新,测试集用于评估模型的泛化能力。测试集没有参与模型训练,这有助于客观评估模型在从未见过的数据上的表现。

基于PyTorch的基因表达量预测模型构建与评估

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

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