Кодування категоричних змінних за допомогою оцінки ймовірності


22

Я намагаюся зрозуміти, як я можу кодувати категоричні змінні, використовуючи оцінку ймовірності, але поки що мало успіху.

Будь-які пропозиції будуть дуже вдячні.


Що робити під час прогнозування, коли у нас немає цільової мітки?
Раньєет Сінгх

Відповіді:


24

Я також вивчав цю тему, і ось що я знайшов:

  • Цей тип кодування називається імовірністю кодування , кодуванням впливу або кодуванням цілі

  • Ідея - це кодування вашої категоріальної змінної із застосуванням цільової змінної (безперервної чи категоричної залежно від завдання). Наприклад, якщо у вас є завдання регресії, ви можете кодувати свою категоричну змінну із середнім значенням цілі. Для кожної категорії ви обчислюєте відповідне середнє значення цілі (серед цієї категорії) і замінюєте значення категорії цим середнім.

  • Якщо у вас є завдання класифікації, ви обчислюєте відносну частоту цілі стосовно кожного значення категорії.

  • З математичної точки зору, таке кодування означає ймовірність вашої цілі, що залежить від значення кожної категорії.

  • Якщо ви зробите це простим способом, як я описав вище, ви, ймовірно, отримаєте необ’єктивну оцінку. Ось чому в спільноті Kaggle вони зазвичай використовують 2 рівні перехресної перевірки. Прочитайте цей коментар raddar тут . Відповідний зошит тут .

Цитата:

Він приймає середнє значення y. Але не простою середньою, а перехресною валідацією в рамках крос-валідації;

Скажімо, у нас є 20-кратна перехресна перевірка. нам потрібно якось обчислити середнє значення функції для 1-го кратного часу, використовуючи лише інформацію з # 2- # 20 разів.

Отже, ви берете # 2- # 20 складки, створюєте ще один набір перехресних перевірок всередині нього (я зробив у 10 разів). обчисліть кошти за кожну відпустку-разову складку (зрештою, ви отримаєте 10 засобів). Ви в середньому оцінюєте ці 10 значень і застосовуєте цей вектор для вашого основного набору перевірок №1. Повторіть це для решти 19 складок.

Це важко пояснити, важко зрозуміти і опанувати :) Але якщо зробити все правильно, це може принести багато користі :)

  • Ще одна реалізація цього кодування є тут .

  • У бібліотеці vtreat R вони мають реалізацію кодування впливу. Дивіться цю публікацію .

  • У бібліотеці CatBoost у них багато варіантів кодування категоричної змінної, включаючи цільове кодування.

  • Такого кодування в sklearn ще немає.


1
Існує цільове кодування в кодерах категорії Sklearn-contrib
Джош

Як би ви реалізували функціональну взаємодію, якщо використовуєте цільове кодування? Наприклад, ви кодуєте F1 і F2, кодовані цільовим вмістом. Ви б просто помножили закодовані значення F1 * F2?
Михайло Ларіонов

Якщо ви обчислюєте середнє значення для кожної складної частини ЛОО, то ви берете середнє значення з них, це точно так само, як ви берете середнє значення # 2- # 20 разів, я не розумію, чому це можна вважати резюме. Також я не розумію, що він має на увазі під «вектором», коли він в середньому оцінює ці 10 засобів.
SiXUlm

Пізній коментар; цільове кодування в категоріях кодерів є простим середнім кодуванням; він не виконує регуляризацію складок в межах складок, описану raddar.
Ден Скалі

7

Цільове кодування тепер доступне в sklearn через пакунок category_encoders.

Цільовий кодер

class category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = None, drop_invariant = False, return_df = True, impute_missing = True, handle_unknown = 'імпутувати', min_samples_leaf = 1, згладжування = 1)

Цільова кодування для категоричних ознак. Заснований на підході на вихід.

Як зазначив Джош у коментарі вище.


1

Кодування ймовірності все ще недоступне для навчання scikit. Ви можете зробити це, створивши словник, а потім виконати функцію заміни.

dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
    df.iloc[i] = dict1[df.iloc[i]] 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.