pytorch 如何使用AutoEncoder评估要素重要性并选择要素

hs1ihplo  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(93)

我知道自动编码器(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())

字符串

h79rfbju

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

相关问题