Назначить вес корпуса в воде для создания gbm создать избыточное количество данных разработки?

Я строю модель gbm, используя h2o. Данные обучения случайным образом разделяются на 70% данных разработки и 30% данных своевременной проверки. Обучающие данные имеют плохую частоту 1,4%, и мне также нужно назначить вес для каждого наблюдения (данные имеют столбец веса). Замечание: модель, построенная с использованием веса, имеет гораздо более высокие характеристики по данным разработки (DEV) по сравнению с моделью, построенной без веса (VAL). Модель, построенная с учетом веса, имеет большую разницу в производительности между данными разработки и своевременной проверки. Например, сборка модели с весом показывает коэффициент захвата ниже 10% верхних.

DEV: 56%
Проверка: 25%

В то время как сборка модели без веса показывает коэффициент захвата ниже 10%:

DEV: 35%
Проверка: 23%

Кажется, что вес использования в этом случае помог повысить производительность модели как при разработке, так и при своевременной проверке данных. Хотите знать, как именно вес используется в воде? С учетом веса, используемого при построении модели, свидетельствует ли большая разница в производительности модели на DEV и VAL более высокую нестабильность построения модели gbm в воде?

потеря журнала с весом и без него

Синяя кривая - это DEV, оранжевая кривая - для VAL>. В случае отсутствия веса потеря журнала для DEV и VAL началась с одной и той же точки. В то время как для взвешенного случая потеря журнала для DEV и VAL началась с двух разных точек. Как интерпретировать эту диаграмму потерь журнала, почему вес в H2O gbm создает такие отличия в выходных данных функции потерь журнала?


person Eric_IL    schedule 08.05.2017    source источник


Ответы (1)


Без дополнительной информации (такой как фактические данные) я предполагаю, что пробел в отправной точке, который вы видите, представляет собой случайный шум.

Чтобы исследовать это дальше, я предлагаю сначала попробовать разные случайные семена. Мне нравится делать это с помощью h2o.grid, делая seed гиперпараметром. Всего 3 или 4 различных значения дадут вам хорошее представление о том, насколько случайность влияет на модель.

Второе, что я бы попробовал, - это разные сплиты поезд / действительный. Опять же, явно дайте начальное значение функции разделения, чтобы вы могли получить повторяемые результаты. Если ваш набор данных довольно мал, я бы ожидал, что это будет большим фактором.

Объединение этих двух идей: (примерный код)

for split_seed in [1,1103,4387]:
  split data using seed
  h2o.grid(
    algorithm = "gbm",
    grid_id = "ww" + split_seed,
    hyper_params = list(
      seed = [77,800,2099]
      ),
    ...(with weights)...
    )
  h2o.grid(
    algorithm = "gbm",
    grid_id = "wo" + split_seed,
    hyper_params = list(
      seed = [77,800,2099]
      ),
    ...(without weights)...
    )

Я предполагаю, что если вы наложите 9 диаграмм истории оценок, которые вы получаете, с весами, и сравните их с 9 диаграммами истории оценок, которые вы получите без весов, вы увидите одинаковую степень размытости на каждой.

Если вы всегда / никогда не получаете этот начальный разрыв на всех 9, в зависимости от веса или без него, то происходит что-то более интересное, и я надеюсь, что вы сможете сделать доступным достаточно данных и кода, чтобы другие могли его воспроизвести.

person Darren Cook    schedule 08.05.2017
comment
Спасибо, Даррен! На приведенной выше диаграмме показаны весовые сценарии и без весовых сценариев для одних и тех же данных разработки и проверки. Хотите знать, почему разница в потерях в журнале отображается на левом графике, а на правом - нет? - person Eric_IL; 09.05.2017
comment
@Eric_IL Я подозреваю, что это просто артефакт того конкретного разделения данных - мой ответ состоял в том, чтобы выяснить, так ли это или нет. - person Darren Cook; 09.05.2017