HIV 预测模型: 基于深度神经网络的基因表达数据分析
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 感染的预测效果更好。
注意:
- 本代码仅供参考,实际应用中需要根据具体情况进行调整和优化。
- 为了保护用户隐私,代码中的数据路径和文件名已进行修改。
- 代码中使用的库版本可能与实际运行环境不同,请根据实际情况进行调整。
- 运行代码前请确保已安装所需的库。
原文地址: https://www.cveoy.top/t/topic/l6Ti 著作权归作者所有。请勿转载和采集!