HIV 预测模型: 基于深度神经网络的基因表达数据分析

本代码使用深度神经网络模型来预测 HIV 感染状态,并通过基因表达数据进行分析。代码包括数据预处理、模型构建、训练、评估和特征重要性分析等步骤。

1. 导入库

import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import roc_curve, auc
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

2. 读取数据

# 读取Excel数据
data = pd.read_excel('C:\Users\lenovo\Desktop\HIV\DNN神经网络测试\data1.xlsx')

# 提取患病标签和基因表达数据
X = data.iloc[:, 1:].values
y = data.iloc[:, 0].values

# 将标签转换为二元变量
y = np.array([1 if i == 'Yes' else 0 for i in y])

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

3. 定义神经网络模型

# 定义DNN神经网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(X_train.shape[1], 64)
        self.fc2 = nn.Linear(64, 32)
        self.fc3 = nn.Linear(32, 1)
        self.activation = nn.ReLU()
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        x = self.fc1(x)
        x = self.activation(x)
        x = self.fc2(x)
        x = self.activation(x)
        x = self.fc3(x)
        x = self.sigmoid(x)
        return x


model = Net()

4. 定义优化器和损失函数

# 定义优化器和损失函数
optimizer = optim.Adam(model.parameters(), lr=0.001)
loss = nn.BCELoss()

5. 训练模型

# 训练模型
loss_list = []
for epoch in range(100):
    running_loss = 0.0
    for i in range(len(X_train)):
        inputs = torch.FloatTensor(X_train[i]).unsqueeze(0)
        targets = torch.FloatTensor([y_train[i]])
        optimizer.zero_grad()
        outputs = model(inputs)
        l = loss(outputs, targets)
        l.backward()
        optimizer.step()
        running_loss += l.item()
    loss_list.append(running_loss / len(X_train))
    print('[Epoch %d] loss: %.3f' % (epoch + 1, running_loss / len(X_train)))

# 绘制损失函数曲线
plt.plot(range(1, 101), loss_list)
plt.title('Model Loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train'], loc='upper right')
plt.show()

6. 评估模型

# 预测测试集标签
y_pred = []
for i in range(len(X_test)):
    inputs = torch.FloatTensor(X_test[i]).unsqueeze(0)
    outputs = model(inputs)
    y_pred.append(outputs.item())
y_pred = np.array(y_pred)

# 绘制ROC曲线
fpr, tpr, threshold = roc_curve(y_test, y_pred)
roc_auc = auc(fpr, tpr)
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

7. 特征重要性分析

# 计算特征重要性
importance = model.fc1.weight.detach().numpy().reshape(-1)
gene_names = data.columns[1:]
gene_importance = pd.DataFrame({'Gene': gene_names, 'Importance': importance})
gene_importance = gene_importance.sort_values(by='Importance', ascending=False)

# 绘制特征重要性图
plt.figure(figsize=(12, 8))
sns.barplot(x='Importance', y='Gene', data=gene_importance)
plt.title('Feature Importance')
plt.xlabel('Importance')
plt.ylabel('Gene')
plt.show()

# 绘制热图
sns.heatmap(data.corr(method='pearson'), cmap='coolwarm')
plt.title('Correlation Heatmap')
plt.show()

# 使用t-SNE将高维数据转换为二维空间
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)

# 绘制t-SNE图
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y)
plt.title('t-SNE')
plt.show()

总结

本代码展示了如何使用深度神经网络模型来预测 HIV 感染状态,并通过基因表达数据进行分析。代码包括数据预处理、模型构建、训练、评估和特征重要性分析等步骤。 通过分析特征重要性,我们可以了解哪些基因对 HIV 感染的预测效果更好。

注意:

  • 本代码仅供参考,实际应用中需要根据具体情况进行调整和优化。
  • 为了保护用户隐私,代码中的数据路径和文件名已进行修改。
  • 代码中使用的库版本可能与实际运行环境不同,请根据实际情况进行调整。
  • 运行代码前请确保已安装所需的库。
HIV 预测模型: 基于深度神经网络的基因表达数据分析

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

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