TensorFlow2中提供的几种处理特征列的方法小结
作者:镰刀韭菜
TensorFlow 2 提供了多种处理特征列的方法,用于对数据进行转换,然后把转换后的数据传入TensorFlow的layers.DenseFeatures层,并将该层作为神经网络的输入层。
1. 处理数值列
一个特征列的输出将成为模型的输入。 数值列(numeric column) 是最简单的列类型。它用于表示实数特征。使用此列时,模型将从 dataframe 中接收未更改的列值。
用法示例:
photo_count = feature_column.numeric_column('PhotoAmt') demo(photo_count)
2. 对数值列进行分桶(或分段)
通常,如果不希望将数字直接输入模型,而是根据数值范围将其值分成不同的类别。例如,考虑代表一个人年龄的原始数据。我们可以用 分桶列(bucketized column)将年龄分成几个分桶(buckets),而不是将年龄表示成数值列。请注意下面的 one-hot 数值表示每行匹配的年龄范围。
用法示例:
age = feature_column.numeric_column('Age') age_buckets = feature_column.bucketized_column(age, boundaries=[1, 3, 5]) demo(age_buckets)
3. 处理分类列
在数据集中,如果分类列用字符串表示(例如 ‘fixed’,‘normal’,或 ‘reversible’)。我们无法直接将字符串提供给模型。相反,我们必须首先将它们映射到数值。分类词汇列(categorical vocabulary columns)提供了一种用 one-hot 向量表示字符串的方法。词汇表可以用 categorical_column_with_vocabulary_list 作为 list 传递,或者用 categorical_column_with_vocabulary_file 从文件中加载。
用法示例:
# 把分类字段转换为分类列(categorical_column) animal_type = feature_column.categorical_column_with_vocabulary_list('Type', ['Cat', 'Dog']) # 把分类列(categorical_column)转换为独热编码 animal_type_one_hot = feature_column.indicator_column(animal_type) demo(animal_type_one_hot)
4. 使用Embedding处理分类列
假设我们不是只有几个可能的字符串,而是每个类别有数千(或更多)值。 由于多种原因,随着类别数量的增加,使用 one-hot 编码训练神经网络变得不可行。我们可以使用嵌入列来克服此限制。嵌入列(embedding column)将数据表示为一个低维度密集向量,而非多维的 one-hot 向量,该低维度密集向量可以包含任何数,而不仅仅是 0 或 1。嵌入的大小(在下面的示例中为 8)是必须调整的参数。
关键点:当分类列具有许多可能的值时,最好使用嵌入列。
用法示例:
# Notice the input to the embedding column is the categorical column we previously created breed1 = feature_column.categorical_column_with_vocabulary_list('Breed1', dataframe.Breed1.unique()) breed1_embedding = feature_column.embedding_column(breed1, dimension=8) demo(breed1_embedding)
5. 经过哈希处理的特征列
表示具有大量数值的分类列的另一种方法是使用 categorical_column_with_hash_bucket。该特征列计算输入的一个哈希值,然后选择一个 hash_bucket_size 分桶来编码字符串。使用此列时,您不需要提供词汇表,并且可以选择使 hash_buckets 的数量远远小于实际类别的数量以节省空间。
关键点:该技术的一个重要缺点是可能存在冲突,不同的字符串被映射到同一个范围。实际上,无论如何,经过哈希处理的特征列对某些数据集都有效。
用法示例:
breed1_hashed = feature_column.categorical_column_with_hash_bucket('Breed1', hash_bucket_size=10) demo(feature_column.indicator_column(breed1_hashed))
6. 使用组合的特征列
将多种特征组合到一个特征中,称为特征组合(feature crosses),它让模型能够为每种特征组合学习单独的权重。这里,我们将创建一个 age 和 thal 组合的新特征。请注意,crossed_column 不会构建所有可能组合的完整列表(可能非常大)。相反,它由 hashed_column 支持,因此可以选择表的大小。
用法示例
crossed_feature = feature_column.crossed_column([age_buckets, animal_type], hash_bucket_size=10) demo(feature_column.indicator_column(crossed_feature))
经过前面这些方法预处理之后,可以把它们拼接起来一起作为神经网络的输入层。
到此这篇关于TensorFlow2中提供的几种处理特征列的方法小结的文章就介绍到这了,更多相关TensorFlow2 处理特征列内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!