OneHot Кодирование полного кадра данных String

1

У меня есть 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?

  • 0
    Я не совсем понимаю, что вы хотите от первого вопроса, но я считаю, что pandas get_dummies сработает для вас, как только ваши данные окажутся во фрейме данных. pandas.pydata.org/pandas-docs/stable/generated/… По второму вопросу у меня лично не было проблем с преобразованием массивов np в pd-фреймы данных с использованием ряда алгоритмов машинного обучения, и в данном случае, как это это просто категоричный номер, я бы не ожидал. Удачи
Теги:
tensorflow
pandas
numpy
keras

1 ответ

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 - количество уровней для каждой категории, так как остальная часть информации является избыточной. Вы можете опустить этот аргумент, если хотите сохранить все столбцы по той или иной причине

Ещё вопросы

Сообщество Overcoder
Наверх
Меню