深度学习中大量的虚拟变量

时间:2020-07-20 20:51:45

标签: machine-learning deep-learning dummy-variable

我正在尝试为回归问题训练深度学习模型。我有2000个重要的分类输入,每个输入有3个分类。如果将它们转换为虚拟变量,那么我将有6,000个虚拟变量作为深度学习模型的输入,并且由于我的输入(6,000个虚拟变量)不以零为中心,因此优化工作非常困难。而且,每个虚拟变量的方差很小,因此6,000个虚拟变量将很难解释输出方差。我想知道是否需要对虚拟变量使用z评分来帮助优化?另外,是否有更好的解决方案来处理这2,000种分类输入?

1 个答案:

答案 0 :(得分:1)

您应该使用Embeddings,它将大的稀疏向量转换为保留语义关系的低维空间。因此,对于每个分类特征,您将拥有密集的矢量表示。

这里是使用TensorFlow的伪代码:

unique_amount_1 = np.unique(col1)
input_1 = tf.keras.layers.Input(shape=(1,), name='input_1')
embedding_1 = tf.keras.layers.Embedding(unique_amount_1, 50, trainable=True)(input_1)
col1_embedding = tf.keras.layers.Flatten()(embedding_1)

unique_amount_2 = np.unique(col2)
input_2 = tf.keras.layers.Input(shape=(1,), name='input_2')
embedding_2 = tf.keras.layers.Embedding(unique_amount_2, 50, trainable=True)(input_2)
col2_embedding = tf.keras.layers.Flatten()(embedding_2)

combined = tf.keras.layers.concatenate([col1_embedding, col2_embedding])
result = tf.keras.layers.Dense()(combined)

model = tf.keras.Model(inputs=[col1, col2], outputs=result)

50处-嵌入向量的大小。