【问题标题】:OneHot Encoding a full String dataframe一个热编码一个完整的字符串数据帧
【发布时间】:2018-12-11 00:00:25
【问题描述】:

我的数据框有 6 列,数据类型为 string(所有数据均为字符串类型)。我想将数据编码为二进制向量,以便在KerasTensorflow 中进行训练。

  Llower  Lupper   Lbody        OpenStyle       CloseStyle  Color
0   long  middle    long   open_equal_low   open_equal_low  green
1  equal   short    long   open_equal_low   open_equal_low    red
2  equal  middle  middle  open_equal_high   open_equal_low    red
3  equal   short  middle  open_equal_high  open_equal_high  green
4  short   short  middle   open_equal_low  open_equal_high    red

我尝试将它们编码为int,然后再编码为binary vector。 我的转换为int的代码:

df = df.apply(labelEncoder.fit_transform)

结果:

   Llower  Lupper  Lbody  OpenStyle  CloseStyle  Color
0       1       2      1          2           2      1
1       0       3      1          2           2      2
2       0       2      2          1           2      2
3       0       3      2          1           1      1
4       3       3      2          2           1      2

当我尝试使用to_categorical 转换它们时:

df.Llower = to_categorical(df.Llower,num_classes=4)
df.Lbody = to_categorical(df.Lbody,num_classes=4)
df.Lupper = to_categorical(df.Lupper,num_classes=4)
df.OpenStyle = to_categorical(df.OpenStyle,num_classes=5)
df.CloseStyle = to_categorical(df.CloseStyle,num_classes=5)
df.Color = to_categorical(df.Color,num_classes=3)

结果:

   Llower  Lupper  Lbody  OpenStyle  CloseStyle  Color
0     0.0     0.0    0.0        0.0         0.0    0.0
1     1.0     0.0    0.0        0.0         0.0    0.0
2     1.0     0.0    0.0        0.0         0.0    0.0
3     1.0     0.0    0.0        0.0         0.0    0.0
4     0.0     0.0    0.0        0.0         0.0    0.0

这是将数据转换为二进制向量的错误。 如何将数据正确编码为二进制向量?(或者 Tensorflow/Keras 训练过什么没有任何问题)

我的第二个问题:

编码数据后,我必须将它们转换为Np Array,即全部为float64,代码为dataset = df.values。这种数据类型转换(binary vectorfloat64)是否会对训练质量造成任何问题?数据转换为Numpy Array后如何保持binary vectory

【问题讨论】:

  • 我不太清楚你对第一个问题想要什么,但我相信一旦你的数据在数据框中,pandas get_dummies 会为你工作。 pandas.pydata.org/pandas-docs/stable/generated/… 对于第二个问题,我个人在使用一系列机器学习算法在 np 数组和 pd 数据帧之间转换没有任何问题,在这种情况下,因为它只是一个分类数字,我不希望这样做。祝你好运

标签: python pandas numpy tensorflow keras


【解决方案1】:

我会使用虚拟列,您可以使用pd.get_dummies 来制作。简而言之,这会为原始数据框中的每个因子级别创建零列或一列。这是处理机器学习的分类数据的常用方法,包括用于神经网络。例如:

pd.get_dummies(df, drop_first=True)

返回:

   Llower_long  Llower_short  Lupper_short  Lbody_middle  \
0            1             0             0             0   
1            0             0             1             0   
2            0             0             0             1   
3            0             0             1             1   
4            0             1             1             1   

   OpenStyle_open_equal_low  CloseStyle_open_equal_low  Color_red  
0                         1                          1          0  
1                         1                          1          1  
2                         0                          1          1  
3                         0                          0          0  
4                         1                          0          1  

我使用drop_first=True 是因为您只需要n-1 列,其中n 是每个类别的级别数,因为其余信息是多余的。如果您出于某种原因想要保留所有列,则可以省略该参数

【讨论】:

    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 2020-01-20
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多