首页 > 解决方案 > Keras - 使用嵌入多个分类变量

问题描述

如果我正确理解嵌入矩阵的概念,它们的存在是为了提供一种比使用热编码更有效的方式来编码分类变量。似乎如果您有多个分类变量作为 Keras 模型的输入,则需要为每个分类变量使用单独的嵌入矩阵。但是,我找不到使用 Keras 提供的 Embedding 类将嵌入与多个分类变量一起使用的方法。文档中的示例仅显示了当模型的输入是单个分类变量时如何使用嵌入。当输入包含多个分类变量以及可能不使用嵌入的其他变量(例如,连续变量)时,有人可以提供一个如何使用 Keras 嵌入的工作示例吗?

标签: kerasembedding

解决方案


对于每个分类变量,您可以有单独的嵌入。希望下面的代码有所帮助。

    inputss = []
    embeddings = []
    for c in self.categorical_vars:
        inputs = Input(shape=(1,),name='input_sparse_'+c)
        #no_of_unique_cat  = data_lr[categorical_var].nunique()
        embedding_size = min(np.ceil((no_of_unique_cat)/2), 50 )
        embedding_size = int(embedding_size)
        embedding = Embedding(no_of_unique_cat+1, embedding_size, input_length = 1)(inputs)
        embedding = Reshape(target_shape=(embedding_size,))(embedding)
        inputss.append(inputs)
        embeddings.append(embedding)
    input_numeric = Input(shape=(1,),name='input_constinuous')
    embedding_numeric = Dense(16)(input_numeric)
    inputss.append(input_numeric)
    embeddings.append(embedding_numeric)

    x = Concatenate()(embeddings)

    x = Dense(10, activation = 'relu')(x)
    x = Dropout(.15)(x)
    out_control = Dense(output_shape)(x)

推荐阅读