我有一个数据框,其中有6列,数据类型为string
(所有数据均为String类型)。我想将数据编码为二进制矢量,以便在Keras
,Tensorflow
中进行训练。
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
将数据转换为二进制向量是错误的。 我该如何正确地将数据编码为二进制矢量?
我的第二个问题:
在对数据进行编码之后,我必须将其转换为Np Array
,并全部使用此代码float64
。这种数据类型转换(从dataset = df.values
到binary vector
)对训练质量是否有任何影响?将数据转换为float64
后如何将其保留为binary vectory
?
答案 0 :(得分: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
是每个类别的级别数,因为其余信息是多余的。如果您出于某种原因保留所有列,则可以省略该参数