Обработка категориальных переменных в sklearn с помощью быстрого кодирования - PullRequest
1 голос
/ 22 марта 2019

Может ли кто-нибудь помочь с любым существующим классом Python для категориального кодировщика для sklearn, в котором установлены следующие флажки?

  1. pandas friendly - возможность вернуть фрейм данных
  2. должна иметь возможностьчтобы отбросить 1 столбец в режиме быстрого ввода
  3. обработка невидимых категорий в тестовых данных.
  4. совместим с объектом sklearn Pipeline.

1 Ответ

0 голосов
/ 22 марта 2019

Я думаю, вы ищете pandas.get_dummies

См. Следующий пример.

df = pd.DataFrame({"col_a":['cat','dog','cat','mouse','mouse','cat'], 'col_b':[10,14,16,18,20,22], 'col_c':['a','a','a','b','b','a']})

# `drop_first` parameter will drop the one categorical column
df = pd.get_dummies(df, columns=['col_a','col_c'], drop_first=True)
print(df)

Вывод:

  col_b  col_a_dog  col_a_mouse  col_c_b                                                                                               
0     10          0            0        0                                                                                               
1     14          1            0        0                                                                                               
2     16          0            0        0                                                                                               
3     18          0            1        1                                                                                               
4     20          0            1        1                                                                                               
5     22          0            0        0      

Он охватывает первые 2 условия, которые вы упомянули.

Для 3-го условия вы можете сделать следующее.

  • создать макеты на тренировочных данных
    dummy_train = pd.get_dummies(train)
  • создать макеты в новом (невидимые данные)
    dummy_new = pd.get_dummies(new_data)
  • переиндексировать новые данные в столбцах обучающих данных, заполняя недостающие значения 0
    dummy_new.reindex(columns = dummy_train.columns, fill_value=0)

Фактически, любые новые функции, которые являются категоричными, не попадут в классификатор, но я думаю, что это не должно вызывать проблем, поскольку он не знает, что с ними делать.

...