Фиктивные переменные - может ли значение этих двоичных переменных быть больше 1?

У меня есть следующий набор данных:


**organization**     **university**
  Facebook             Harvard
  Facebook             Harvard
  Facebook             Harvard
  Wetpaint             UC Berkeley
  Wetpaint             LSE

Это университеты, в которых учатся основатели и соучредители этих организаций. Для моего проекта машинного обучения (с использованием случайного леса и деревьев решений) я хотел бы иметь по одной строке для каждой организации. Я считаю, что легко мог бы сделать это, создав фиктивные переменные, где у них будет 1 для существования организации и 0 в противном случае.

После создания фиктивных переменных можно будет добавить фиктивные переменные и объединить строки. Вот результат, которого я ожидал:


**organization**  **Harvard**  **UC Berkeley**  **LSE**
Facebook               3              0            0
Wetpaint               0              1            1

Мне интересно, имеет ли это технически смысл для алгоритмов машинного обучения. Я также думаю, что, поскольку у нас есть 3 строки для Facebook и только 2 строки для Wetpaint, это также вызывает дисбаланс в строках. Интересно, вызовет ли это также дополнительные проблемы.

В качестве альтернативы можно ли иметь повторяющиеся строки для каждой организации и просто запускать алгоритм? Это вызовет какие-нибудь проблемы?

Пожалуйста, дай мне знать. Пожалуйста, оставьте ссылку на соответствующую книгу или научный журнал.


person Ammar Kamran    schedule 29.10.2020    source источник


Ответы (1)


Для достижения желаемого результата просто используйте pandas cross tab

>>> data = {'organization':['Facebook','Facebook','Facebook','Wetpaint','Wetpaint'], 'university':['Harvard','Harvard','Harvard','UCBerveley','LSE']}
>>> df = pd.datframe(data=data)

>>> df
  organization  university
0     Facebook     Harvard
1     Facebook     Harvard
2     Facebook     Harvard
3     Wetpaint  UCBerveley
4     Wetpaint         LSE

#use crosstab

>>> df_new = pd.crosstab(df.organization, df.university).reset_index()
>>> df_new
university organization  Harvard  LSE  UCBerveley
0              Facebook        3    0           0
1              Wetpaint        0    1           1

К остальным из вас вопрос машинного обучения: не существует большого правила, определяющего наилучший способ предварительной обработки набора данных, это полностью зависит от вашего варианта использования и того, насколько большие и разнообразные данные вы используете. Например: в приведенном выше вопросе вместо подсчета для каждого университета во всех отдельных столбцах, где у вас есть проблема 0's прихода в другие университеты, вы также можете использовать его таким же образом, где на основе organisation и university он даст вам счет только присутствующих людей, так что нет 0's

>>> df.groupby(['organization','university'])['university'].count()
organization  university
Facebook      Harvard       3
Wetpaint      LSE           1
              UCBerveley    1

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

person think-maths    schedule 10.01.2021