深度学习中的大量虚拟变量
large number of dummy variables in deep learning
我正在尝试针对回归问题训练深度学习模型。我有 2000 个重要的分类输入,每个输入有 3 个类别。如果我将它们转换为虚拟变量,那么我将有 6,000 个虚拟变量作为深度学习模型的输入,这使得优化变得非常困难,因为我的输入(6,000 个虚拟变量)不是以零为中心的。此外,每个虚拟变量的方差很小,因此 6,000 个虚拟变量将很难解释输出的方差。我想知道是否需要对虚拟变量使用 z 分数来帮助优化?另外,有没有更好的方案来处理这2000个分类输入?
您应该使用 Embeddings,它将大的稀疏向量转换为保留语义关系的低维 space。因此,对于每个分类特征,您将具有密集的向量表示。
这是使用 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
- 嵌入向量的大小。
我正在尝试针对回归问题训练深度学习模型。我有 2000 个重要的分类输入,每个输入有 3 个类别。如果我将它们转换为虚拟变量,那么我将有 6,000 个虚拟变量作为深度学习模型的输入,这使得优化变得非常困难,因为我的输入(6,000 个虚拟变量)不是以零为中心的。此外,每个虚拟变量的方差很小,因此 6,000 个虚拟变量将很难解释输出的方差。我想知道是否需要对虚拟变量使用 z 分数来帮助优化?另外,有没有更好的方案来处理这2000个分类输入?
您应该使用 Embeddings,它将大的稀疏向量转换为保留语义关系的低维 space。因此,对于每个分类特征,您将具有密集的向量表示。
这是使用 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
- 嵌入向量的大小。