У меня есть 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_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 vector
в float64
) какие-либо проблемы для качества обучения? Как данные могут оставаться binary vectory
после преобразования их в Numpy Array
?
Я бы использовал фиктивные столбцы, которые вы можете использовать с помощью 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
- количество уровней для каждой категории, так как остальная часть информации является избыточной. Вы можете опустить этот аргумент, если хотите сохранить все столбцы по той или иной причине