自动编码器对数据的特征/类别进行编码

时间:2020-05-21 17:15:52

标签: python deep-learning pytorch categorical-data autoencoder

我的问题是关于自动编码器的使用(在PyTorch中)。我有一个具有10个不同类别的分类特征的表格数据集。这些类别的名称完全不同-有些名称由一个单词组成,有些则由两个或三个单词组成。但是总的来说,我有10个唯一的类别名称。我想做的是创建一个自动编码器,对这些类别的名称进行编码-例如,如果我有一个名为'Medium size class'的类别,我想看看是否可以训练自动编码器对该名称进行编码像'mdmsc'之类的东西。它的用途是找出难以编码的数据点或不典型的数据点或类似的东西。我尝试从各种在线教程中改编自动编码器体系结构,但是对我来说似乎什么都没有用,或者我根本不知道如何使用它们,因为它们全都与图像有关。也许有人不知道这种自动编码器如何实现?

编辑:这是我到目前为止拥有的模型(我只是尝试适应一些我在网上找到的体系结构):

class Autoencoder(nn.Module):

def __init__(self, input_shape, encoding_dim):
    super(Autoencoder, self).__init__()

    self.encode = nn.Sequential(
        nn.Linear(input_shape, 128),
        nn.ReLU(True),
        nn.Linear(128, 64),
        nn.ReLU(True),
        nn.Linear(64, encoding_dim),
    )

    self.decode = nn.Sequential(
        nn.Linear(encoding_dim, 64),
        nn.ReLU(True),
        nn.Linear(64, 128),
        nn.ReLU(True),
        nn.Linear(128, input_shape)
    )

def forward(self, x):
    x = self.encode(x)
    x = self.decode(x)
    return x

model = Autoencoder(input_shape=10, encoding_dim=5)

我也用LabelEncoder()然后用OneHotEncoder()给出这些功能/类别,我提到了数字形式。但是,经过训练后,输出与输入相同(类别名称未更改),但是当我尝试仅使用编码器部分时,由于尺寸原因,我无法应用LabelEncoder(),然后再应用OneHotEncoder()问题。我觉得也许一开始我可以做些不同的事情,然后尝试以数字形式给出这些特征,但是我不确定应该怎么做。

1 个答案:

答案 0 :(得分:0)

首先,您需要根据将要遍历数据点的数据来设置train_loader。

然后,您需要弄清楚将要使用哪种损失和优化程序:

# mean-squared error loss
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=.001)  #learning rate depend on your task

准备好之后,您可以按照以下基本步骤训练自动编码器:

for epoch in range(epochs):
        for features in train_loader:

            optimizer.zero_grad()
            outputs = model(batch_features)
            train_loss = criterion(outputs, features)
            train_loss.backward()
            optimizer.step()

完成模型训练后,您可以使用以下方法检查嵌入:

embedding = model.encode(your_input)