Python OneHot对完整字符串数据帧进行编码
我有一个dataframe,它有6列,数据类型为Python OneHot对完整字符串数据帧进行编码,python,pandas,numpy,tensorflow,keras,Python,Pandas,Numpy,Tensorflow,Keras,我有一个dataframe,它有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_
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
,然后再编码成二进制向量。
转换为int
的我的代码:
df=df.apply(labelEncoder.fit\u变换)
结果:
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
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
当我试图用将它们转换为\u category
:
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 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
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 train中的任何内容都不会有任何问题)
我的第二个问题:
在编码数据之后,我必须将它们转换为Np Array
,这是所有float64
的代码dataset=df.values
。这种数据类型转换(binary vector
到float64
)会对训练质量产生任何问题吗?在将数据转换为Numpy数组
后,数据如何保持为二进制向量?我将使用伪列,您可以使用。简而言之,这将为原始数据帧中的每一级因子创建零或一列。这是机器学习中处理分类数据的常用方法,包括用于神经网络。例如:
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\u first=True
,因为您只需要n-1
列,其中n
是每个类别的级别数,因为其余信息是冗余的。如果出于这样或那样的原因想保留所有列,可以省略该参数我不太清楚第一个问题需要什么,但我相信,一旦您的数据位于数据框中,pandas get_dummies将适用于您。对于第二个问题,我个人在np数组和pd数据帧之间转换时没有遇到任何问题,使用了一系列机器学习算法,在这种情况下,因为它只是一个分类数,我不希望出现这种情况。祝你好运