我正在尝试为一个回归问题训练一个深度学习模型。我有2000个重要的分类输入,每个输入都有3个类别。如果我将它们转换为虚拟变量,那么我将有6000个虚拟变量作为深度学习模型的输入,这使得优化非常困难,因为我的输入(6000个虚拟变量)不是以零为中心的。此外,每个虚拟变量的方差都很小,因此6000个虚拟变量将很难解释输出中的方差。我想知道我是否需要对虚拟变量使用z分数来帮助优化?此外,是否有更好的解决方案来处理这2,000个分类输入?
发布于 2020-07-21 05:35:45
您应该使用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 -嵌入向量的大小。
https://stackoverflow.com/questions/63003609
复制相似问题