实现Label Encoder作为Tensorflow预处理层



根据我对SKLearn文档的理解,SKLearn中的LabelEncoder编码的值介于0和类数减去1之间(即n_classes- 1)。

我想使用类似的东西作为Tensorflow预处理操作的一部分,以避免对包使用SKLearn。例如,我理解预处理层为OneHot编码和分类编码提供了api,如下所示:

tf.keras.layers.CategoryEncoding(
num_tokens=None, output_mode='multi_hot', sparse=False, **kwargs
)

是否有任何方法使用LabelEncoder在CategoryEncodingAPI的某些参数,或者我必须使用在Tensorflow文档中提供的抽象基类模板定义一个全新的预处理层?

如果是这样,是否有任何可能的参考我如何写我自己的类使用LabelEncoder作为Tensorflow层?

iuc,您只需要稀疏的整数标签。所以,也许可以先尝试一些简单和天真的东西:

classes = ['fish1', 'fish2', 'fish3']
data = ['fish1', 'fish2', 'fish3', 'fish2', 'fish3', 'fish1']
class_indices = dict(zip(classes, range(len(classes))))
labels = list(map(class_indices.get, data))
print(labels) 
[0, 1, 2, 1, 2, 0]

或者使用Tensorflow,您可以使用StaticHashTable:

import tensorflow as tf
classes = ['fish1', 'fish2', 'fish3']
data = tf.constant(['fish1', 'fish2', 'fish3', 'fish2', 'fish3', 'fish1'])
table = tf.lookup.StaticHashTable(
tf.lookup.KeyValueTensorInitializer(tf.constant(classes), tf.range(len(classes))),
default_value=-1)
label_encoder = tf.keras.layers.Lambda(lambda x: table.lookup(x))
print(label_encoder(data))
tf.Tensor([0 1 2 1 2 0], shape=(6,), dtype=int32)

最新更新