Я намагаюся зрозуміти, як я можу кодувати категоричні змінні, використовуючи оцінку ймовірності, але поки що мало успіху.
Будь-які пропозиції будуть дуже вдячні.
Я намагаюся зрозуміти, як я можу кодувати категоричні змінні, використовуючи оцінку ймовірності, але поки що мало успіху.
Будь-які пропозиції будуть дуже вдячні.
Відповіді:
Я також вивчав цю тему, і ось що я знайшов:
Цей тип кодування називається імовірністю кодування , кодуванням впливу або кодуванням цілі
Ідея - це кодування вашої категоріальної змінної із застосуванням цільової змінної (безперервної чи категоричної залежно від завдання). Наприклад, якщо у вас є завдання регресії, ви можете кодувати свою категоричну змінну із середнім значенням цілі. Для кожної категорії ви обчислюєте відповідне середнє значення цілі (серед цієї категорії) і замінюєте значення категорії цим середнім.
Якщо у вас є завдання класифікації, ви обчислюєте відносну частоту цілі стосовно кожного значення категорії.
З математичної точки зору, таке кодування означає ймовірність вашої цілі, що залежить від значення кожної категорії.
Якщо ви зробите це простим способом, як я описав вище, ви, ймовірно, отримаєте необ’єктивну оцінку. Ось чому в спільноті Kaggle вони зазвичай використовують 2 рівні перехресної перевірки. Прочитайте цей коментар raddar тут . Відповідний зошит тут .
Цитата:
Він приймає середнє значення y. Але не простою середньою, а перехресною валідацією в рамках крос-валідації;
Скажімо, у нас є 20-кратна перехресна перевірка. нам потрібно якось обчислити середнє значення функції для 1-го кратного часу, використовуючи лише інформацію з # 2- # 20 разів.
Отже, ви берете # 2- # 20 складки, створюєте ще один набір перехресних перевірок всередині нього (я зробив у 10 разів). обчисліть кошти за кожну відпустку-разову складку (зрештою, ви отримаєте 10 засобів). Ви в середньому оцінюєте ці 10 значень і застосовуєте цей вектор для вашого основного набору перевірок №1. Повторіть це для решти 19 складок.
Це важко пояснити, важко зрозуміти і опанувати :) Але якщо зробити все правильно, це може принести багато користі :)
Ще одна реалізація цього кодування є тут .
У бібліотеці vtreat R вони мають реалізацію кодування впливу. Дивіться цю публікацію .
У бібліотеці CatBoost у них багато варіантів кодування категоричної змінної, включаючи цільове кодування.
Такого кодування в sklearn ще немає.
Цільове кодування тепер доступне в 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)
Цільова кодування для категоричних ознак. Заснований на підході на вихід.
Як зазначив Джош у коментарі вище.
Кодування ймовірності все ще недоступне для навчання scikit. Ви можете зробити це, створивши словник, а потім виконати функцію заміни.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]