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\DNN神经网络测试\output_data.xlsx') test_data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\DNN神经网络测试\output_data1.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

转换为张量

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()))

基于基因表达量预测患者患病状态的 PyTorch 神经网络模型

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

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