【发布时间】:2023-03-22 15:00:01
【问题描述】:
我有一个数据集,其中名称是一个重要特征。我想使用它在 python 的 keras 神经网络中有一个输入节点。但既然这是不可能的,那么最好的方法是什么??
我尝试了一种热编码,但由于名称的长度不固定,它没有用吗?
【问题讨论】:
标签: python python-3.x tensorflow machine-learning keras
我有一个数据集,其中名称是一个重要特征。我想使用它在 python 的 keras 神经网络中有一个输入节点。但既然这是不可能的,那么最好的方法是什么??
我尝试了一种热编码,但由于名称的长度不固定,它没有用吗?
【问题讨论】:
标签: python python-3.x tensorflow machine-learning keras
您可以使用Embeddings,它将大型稀疏向量(one-hot 编码)转换为保留语义关系的低维空间。所以对于分类特征,你将有密集的向量表示。
unique_amount = 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)
其中50 - 嵌入向量的大小,您可以自行选择。
【讨论】:
您可以在keras 中尝试如下character 一级热编码。确保在Tokenizer 中设置char_level=True 标志。这可能会导致我们非常低维的稀疏矩阵。
from keras.preprocessing.text import Tokenizer
tokenizer = Tokenizer(char_level=True)
tokenizer.fit_on_texts(<names>)
sequence_of_int = tokenizer.texts_to_sequences(<dataset_names>)
甚至,您也可以尝试自己表示基于频率的字符编码。
【讨论】: