我知道自动编码器(AE)可以压缩信息并提取表示输入数据的新特征。我发现一篇论文使用AE来评估原始矩阵中每个特征的重要性。在随后的分析中,该研究利用这些选定的特征来建立机器学习模型,如随机森林,XGBoost和逻辑回归。
我想知道如何使用AE来选择特征和权重?而编码器可以具有具有不同权重的多个层?我使用PyTorch为我的矩阵训练AE模型。下面的代码块是我的pytorch代码。
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torch.utils.data as Data
import pandas as pd
input_data = pd.read_csv("D:/tcga/antoencoder/input_ae.txt",delimiter='\t', index_col=0)
###define autoencoder function
class AutoEncoder(nn.Module):
def __init__(self):
super(AutoEncoder, self).__init__()
self.encoder = nn.Sequential(
nn.Linear(428, 128),
nn.Tanh(),
nn.Linear(128, 64),
nn.Tanh(),
nn.Linear(64, 36),
nn.Tanh(),
nn.Linear(36,18),
nn.Tanh(),
nn.Linear(18,9)
)
self.decoder = nn.Sequential(
nn.Linear(9, 18),
nn.Tanh(),
nn.Linear(18,36),
nn.Tanh(),
nn.Linear(36,64),
nn.Tanh(),
nn.Linear(64, 128),
nn.Tanh(),
nn.Linear(128, 428),
nn.Tanh()
)
def forward(self, x):
encoded = self.encoder(x)
decoded = self.decoder(encoded)
return encoded, decoded
loss_func = nn.MSELoss()
BATCH_SIZE = 450
LR = 0.005
EPOCH = 100
autoencoder = AutoEncoder()
optimizer = torch.optim.Adam(autoencoder.parameters(), lr=LR)
for epoch in range(EPOCH):
for i in range(0, tensor2.size(0), BATCH_SIZE):
end_idx = min(i + BATCH_SIZE, tensor2.size(0))
b_x = tensor2[i:end_idx]
b_y = tensor2[i:end_idx]
encoded, decoded = autoencoder(b_x)
loss = loss_func(decoded, b_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch % 5 == 0:
print('Epoch: ', epoch, '| train loss: %.4f' % loss.item())
字符串
1条答案
按热度按时间h79rfbju1#
你说找到了一篇使用AE来选择重要特征的论文。研究人员是如何做到这一点的?什么方法?
您想使用AE来选择最佳功能,但如何使用?关于哪种机制?并对文中所述方法进行了说明。
此外,这些链接可能会帮助您:
What is an idiomatic way to access the encoder layer in an autoencoder?
take the output from a specific layer in pytorch的