从Pandas Dataframe到TensorFLow模型的字符串列的最佳方法是什么?

时间:2018-04-22 06:51:56

标签: python pandas tensorflow categorical-data one-hot-encoding

所以我想说我有一些包含一些字符串列的Pandas DataFrame:

Animal  Name    Age  ...
Cat     Fluffy  2    ...
Dog     Denton  3    ...

我想在我的训练模型中输入Animal列(带有一组已知的值)(用于线性回归)。我查看了以下选项:

  1. tf.feature_column.categorical_column_with_vocabulary_list但似乎您将其与tf.feature_column.make_parse_example_spec和协议缓冲区一起使用。
  2. tf.one_hot听起来似乎有所帮助,但示例代码并没有帮助我理解。
  3. 或者我应该自己写一些东西来将字符串转换为数字/布尔数据?

2 个答案:

答案 0 :(得分:0)

您可以使用tf.feature_column.input_layer功能创建输入张量。首先,必须将分类列包装为指示符或嵌入列。

示例:

# Create columns
vocab_list = ['a','b','c','d']
letter_column = tf.feature_column.categorical_column_with_vocabulary_list(
    key="letter",
    vocabulary_list=vocab_list)
embedded_column = tf.feature_column.embedding_column(letter_column, 8)
indicator_column = tf.feature_column.indicator_column(letter_column)

# Create features and use input_layer to get a tensor
features = {'letter': ['c']}
inp = tf.feature_column.input_layer(features,[embedded_column, indicator_column])

# Print value of inp
with tf.Session() as s:
  s.run([tf.global_variables_initializer(),
         tf.local_variables_initializer(),
         tf.tables_initializer()])
  print(s.run(inp))

输出(前8个数字可能会有所不同):

[[ 0.29994071 -0.07036652 -0.23166095  0.0681599  -0.07477489 -0.25384274
  -0.31568974 -0.09161812  0.          0.          1.          0.        ]]

inp是一个有12个元素的张量。前8是从embedded_column(可训练)计算的嵌入,最后4是来自indicator_column的值的多热表示。

答案 1 :(得分:0)

tf.feature_column命名空间可以如下忽略:

使用熊猫自动将字符串列编码为数值。原始数据框中的类别列将具有属性 cat.codes 。您可以创建一个新的pandas列,然后将这些cat.code复制到其中。新列将是一个数字列,并填充了神经网络所需的数字。

使用如下代码查找类别列,并创建新列:

//now fetching the response from the yt api again and again 
setInterval(() =>
...