将分类特征和文本特征与Keras中的“连接”结合使用,分类特征对输出没有影响

时间:2019-04-29 13:54:14

标签: python machine-learning keras deep-learning feature-selection

我想基于分类特征和其他文本特征来预测类。为了同时使用这两种数据类型,我使用了两个keras“子模型”(带有嵌入层的模型和用于分类数据的简单前馈NN)并将它们串联起来。

但是,在测试中,改变分类特征不会影响预测结果。

我尝试使用不同的激活函数以及更改NN的一般结构(例如,在NLP子系统中使用LSTM,更改Dense节点等)。

关于数据:

  • 分类数据:一键编码有4个特征->一键编码后约有5000个特征

  • 文本数据:使用Keras预处理进行特征提取。Tokenizer,对嵌入层使用了预先训练的嵌入矩阵(在与问题相关的特定语料库上训练)

def EmbeddingsModel():
    inputs = Input(name='input_embeddings',shape=[MAX_LEN])
    layer = Embedding(vocabulary_size, EMBEDDING_DIM, input_length=MAX_LEN, trainable=False, weights=[embedding_matrix])(inputs)
    layer = Flatten()(layer)
    # layer = LSTM(32)(layer)
    layer = Dense(3,name='out_layer')(layer)
    layer = Activation('sigmoid')(layer)
    model = Model(inputs=inputs, outputs=layer)
    return model

def FeedForwardModel(input_dim):
    inputs = Input(name='input_categorical', shape=[input_dim])
    layer = Dense(32, name='dense1_categorical')(inputs)
    layer = Activation('relu')(layer)
    layer = Dense(3, name='output_categorical')(layer)
    layer = Activation('sigmoid')(layer)
    model = Model(inputs=inputs, outputs=layer)
    return model


# Create the sub nets
num_features_categorical = X_categorical.shape[1]
rnn_nlp = EmbeddingsModel()
mlp_cat = FeedForwardModel(num_features_categorical)

# Combine inputs
combinedInput = concatenate([mlp_cat.output, rnn_nlp.output])

# The final layers
x = Dense(32, activation='relu', name='combination_layer')(combinedInput)
x = Dense(3, activation='sigmoid', name='output_layer_final')(x)

# Finish up the model
model = Model(inputs=[mlp_cat.input, rnn_nlp.input], outputs=x)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

Keras model plot

在培训期间,我有兴趣准确检测的班级的查全率达到90%左右,召回率达到85%左右。 但是,该系统似乎仅在NLP部分进行训练,而忽略了分类子系统。

如何实现分类变量影响预测输出?

0 个答案:

没有答案