基于基因表达量预测患者患病状态的 PyTorch 神经网络模型
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()))
原文地址: http://www.cveoy.top/t/topic/nfr4 著作权归作者所有。请勿转载和采集!