Я пытаюсь понять, как я могу кодировать категориальные переменные, используя оценку правдоподобия, но пока добился небольшого успеха.
Любые предложения будут ценны.
Я пытаюсь понять, как я могу кодировать категориальные переменные, используя оценку правдоподобия, но пока добился небольшого успеха.
Любые предложения будут ценны.
Ответы:
Я тоже изучал эту тему, и вот что я нашел:
Этот тип кодирования называется вероятностным кодированием , ударным кодированием или целевым кодированием.
Идея заключается в кодировании вашей категориальной переменной с использованием целевой переменной (непрерывной или категориальной в зависимости от задачи). Например, если у вас есть задача регрессии, вы можете закодировать свою категориальную переменную с помощью среднего целевого значения. Для каждой категории вы вычисляете соответствующее среднее значение цели (среди этой категории) и заменяете значение категории этим средним значением.
Если у вас есть задача классификации, вы рассчитываете относительную частоту вашей цели по отношению к каждому значению категории.
С математической точки зрения эта кодировка означает вероятность вашей цели, зависящую от значения каждой категории.
Если вы сделаете это простым способом, как я описал выше, вы, вероятно, получите предвзятую оценку. Вот почему в сообществе Kaggle они обычно используют 2 уровня перекрестной проверки. Прочитайте этот комментарий Раддара здесь . Соответствующая записная книжка здесь .
Цитата:
Это принимает среднее значение у. Но не просто значит, а в перекрестной проверке в рамках перекрестной проверки;
Допустим, у нас есть 20-кратная перекрестная проверка. нам нужно каким-то образом рассчитать среднее значение признака для сгиба # 1, используя информацию только с сгибов # 2- # 20.
Итак, вы берете # 2- # 20 сгибов, создаете еще один набор перекрестной проверки (я сделал 10-кратный). Рассчитайте средства для каждой раздачи «один на один» (в итоге вы получите 10 средств). Вы усредняете эти 10 средних и применяете этот вектор для своего основного набора проверки # 1. Повторите это для оставшихся 19 сгибов.
Это сложно объяснить, трудно понять и освоить :) Но если все сделано правильно, это может принести много пользы :)
Другая реализация этой кодировки здесь .
В R библиотеки vtreat есть реализация ударного кодирования. Смотрите этот пост .
В библиотеке CatBoost есть много опций для кодирования категориальных переменных, включая целевую кодировку.
В sklearn такой кодировки еще нет.
Целевое кодирование теперь доступно в sklearn через пакет category_encoders.
Target Encoder
class category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = None, drop_invariant = False, return_df = True, impute_missing = True, handle_unknown = 'impute', min_samples_leaf = 1, сглаживание = 1)
Target Encode для категориальных функций. На основе оставить один подход.
Как отметил Джош в комментарии выше.
Кодирование правдоподобия по-прежнему недоступно в Scikit Learn. Вы можете сделать это, создав словарь, а затем выполнить функцию замены.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]