Как использовать несколько катагорических входных переменных разной размерности в модели регрессора случайных лесов? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть данные, которые описывают предмет, проходящий процесс выпуска.Элемент имеет различные переменные, такие как «Категория продукта», «Design_country», «Линия продуктов» и так далее.Всего у меня есть 18 различных типов двоичных или категориальных данных.Эти разные переменные имеют разное измерение.Например, есть 3 разные страны дизайна и 8 разных категорий товаров.Выходные переменные - это время, необходимое элементу для прохождения процесса выпуска, который является непрерывной переменной.Я хочу предсказать, сколько времени потребуется элементу для прохождения процесса.

 Design_cntry      Prod_category    prod_line    ...   time_minutes
     A                  A1             A11       ...     43.2
     B                  B1             A11       ...     20.1    
     C                  E1             B11       ...     15.0
    ...                ...             ...       ...     ....

Чтобы я мог использовать их в качестве входных данных для регрессора случайных лесов, как мне обрабатывать различные входные переменные?

Я знаю, что с помощью категориальных переменных вы можете применить одну горячую кодировку.Но делаю ли я это для каждой отдельной переменной?

 X_des_country = pd.get_dummies([data['design_cntry'], prefix = "design_country")
 X_prod_cat = pd.get_dummies([data['prod_cat'], prefix = "prod_cat")

Тогда у меня будет 18 разных входных кадров данных с разным количеством столбцов.Как я могу использовать эти переменные в качестве входных данных при обучении моей модели?Поместить ли я их все в один фрейм данных "X" путем слияния по индексу?

Или лучше напрямую применить одно горячее кодирование к исходному фрейму данных?

   X = df.drop("time_minutes", axis = 1)
   X = pd.get_dummies(X)

1 Ответ

0 голосов
/ 07 февраля 2019

В качестве (важного) примечания, чтобы избежать ловушки фиктивной переменной, вам нужно удалить одно значение для каждой категориальной переменной: вы можете сделать это, добавив drop_first=True в pd.get_dummies

регрессионная модель, вы можете просто собрать все эти новые функции и использовать ее для обучения вашей модели.Но вам не нужно создавать 18 разных DataFrames, вы можете сделать все это сразу:

>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],'C': [1, 2, 3]})
   A  B  C
0  a  b  1
1  b  a  2
2  a  c  3

>>> pd.get_dummies(df, drop_first=True)
   C  A_b  B_b  B_c
0  1    0    1    0
1  2    1    0    0
2  3    0    0    1

Это создаст фиктивные переменные только для категориальных переменных (то есть столбцы char) и оставит столбец intкак они есть (см. столбец C выше).Если одна из ваших переменных содержит только целые числа, но вы хотите, чтобы она рассматривалась как категориальная переменная, просто заранее преобразовайте ее в символьную переменную.

...