【问题标题】:How to one-hot encode category features with pandas or tensorflow?如何使用 pandas 或 tensorflow 对类别特征进行一次热编码?
【发布时间】:2017-04-27 08:55:45
【问题描述】:

数据是这样的:

   features1    features2       labels
1      1            563           1
2      1            254           1
3   missing         145           1
4      0            126           1
5      0            145           0
6      1            124           0
7      0            456           0

我将把这些数据应用到 Tensorflow 训练过程中,所以我想对特征 1 的值进行 one-hot 编码。

上面数据的矩阵是:

[[1,563,1],
 [2,254,1],
 [missing,145,1],
 [0,126,1],
 [0,145,0],
 [1,124,0],
 [0,456,0]]

所以我认为它可以单热编码为:

> [1,0,0] represents 1 
> [0,1,0] represents 0
> [0,0,1] represents 'missing'

我想要的输出是这样的:

[[1,0,0,563,1],
 [1,0,0,254,1],
 [0,0,1,145,1],
 [0,1,0,126,1],
 [0,1,0,145,0],
 [1,0,0,124,0],
 [0,1,0,456,0]]

我试过 pd.get_dummies。但我做不到。

【问题讨论】:

    标签: python pandas tensorflow


    【解决方案1】:

    我不确定您是如何使用 pd.get_dummies 的,但请注意,此函数会为您生成一个新的数据帧或数组,因此如果您想将 1 个热编码应用于数组中的第一列并保留另一个列原样,您需要像这样重新分配您的数组:

    newArrayWithOneHotEncoding = pd.get_dummies(arrayThatYouWantToTransform, columns = ['firstColumnHeader'])
    

    更新: 我忘了提到您需要为缺少的例如 -1 设置一个不同的值,然后以这种方式应用一个热编码,您将拥有三个新列

    【讨论】:

    • 这意味着它会在新数组中创建新变量,对吧?
    • 是的,它也会删除你为它进行了一次热编码的原始变量
    • 谢谢。如果有很多类别,这将创建太多的新变量。有什么方法可以将 one_hot 编码数组分配给原始变量?
    猜你喜欢
    • 2017-01-07
    • 2022-08-04
    • 2017-07-12
    • 1970-01-01
    • 2017-05-02
    • 2018-07-17
    • 2018-04-28
    • 2018-08-17
    相关资源
    最近更新 更多