2016-12-21 3 views
3

Я пытаюсь подгонять машину повышения градиента (GBM) к страховым претензиям. Наблюдения имеют неодинаковое воздействие, поэтому я пытаюсь использовать смещение, равное журналу экспозиции. Я пробовал два разных способа:Как я могу компенсировать экспозиции в модели gbm в R?

  1. Положить в формулу смещение. Это привело к nan для поезда и валидации для каждой итерации.

  2. Используйте параметр offset в функции gbm. Этот параметр указан ниже gbm.more. В результате появляется сообщение об ошибке, что есть неиспользуемый параметр.

Я не могу предоставить данные моей компании, но я воспроизвел проблему, используя таблицу данных страхования в пакете MASS. См. Код и вывод ниже.

library(MASS) 
library(gbm) 

data(Insurance) 

# Try using offset in the formula. 
fm1 = formula(Claims ~ District + Group + Age + offset(log(Holders))) 

fitgbm1 = gbm(fm1, distribution = "poisson", 
       data = Insurance, 
       n.trees = 10, 
       shrinkage = 0.1, 
       verbose = TRUE) 

# Try using offset in the gbm statement. 
fm2 = formula(Claims ~ District + Group + Age) 
offset2 = log(Insurance$Holders) 

fitgbm2 = gbm(fm2, distribution = "poisson", 
       data = Insurance, 
       n.trees = 10, 
       shrinkage = 0.1, 
       offset = offset2, 
       verbose = TRUE) 

Это затем выводит:

> source('D:/Rprojects/auto_tutorial/rcode/example_gbm.R') 
Iter TrainDeviance ValidDeviance StepSize Improve 
    1  -347.8959    nan  0.1000 0.0904 
    2  -348.2181    nan  0.1000 0.0814 
    3  -348.3845    nan  0.1000 0.0616 
    4  -348.5424    nan  0.1000 0.0333 
    5  -348.6732    nan  0.1000 0.0850 
    6  -348.7744    nan  0.1000 0.0610 
    7  -348.8795    nan  0.1000 0.0633 
    8  -348.9132    nan  0.1000 -0.0109 
    9  -348.9200    nan  0.1000 -0.0212 
    10  -349.0271    nan  0.1000 0.0267 

Error in gbm(fm2, distribution = "poisson", data = Insurance, n.trees = 10, : 
    unused argument (offset = offset2) 

Мой вопрос, что я делаю неправильно? Кроме того, есть ли другой способ? Я заметил параметр весов в функции gbm. Должен ли я использовать это?

+0

Добро пожаловать на сайт. Вопросы, касающиеся исключительно программирования/отладки программы, - это [вне темы] (http://stats.stackexchange.com/help/on-topic) для этого сайта и могут быть закрыты. Если у вас есть статистический вопрос, отредактируйте свой пост, чтобы подчеркнуть его. Вы также можете просмотреть список [интернет-статистических ресурсов] (http://meta.stats.stackexchange.com/questions/793/internet-support-for -statistics-software), которые мы поддерживаем для помощи по программному обеспечению –

+1

Почему бы и нет просто поместите 'log (Holders)' с правой стороны и не ограничивайте его коэффициент в любом случае. –

+1

Даже без смещения я получаю nan для столбца ValidDeviance для этого примера, я не знаю, что это за колонна. –

ответ

1

Ваше первое предложение работает, если вы указали фракцию тренировки меньше 1. По умолчанию 1, что означает, что не существует набора проверки.

library(MASS) 
library(gbm) 

data(Insurance) 

# Try using offset in the formula. 
fm1 = formula(Claims ~ District + Group + Age + offset(log(Holders))) 

fitgbm1 = gbm(fm1, distribution = "poisson", 
       data = Insurance, 
       n.trees = 10, 
       shrinkage = 0.1, 
       verbose = TRUE, 
       train.fraction = .75) 

приводит

Iter TrainDeviance ValidDeviance StepSize Improve 
    1  -428.8293  -105.1735  0.1000 0.0888 
    2  -429.0869  -105.3063  0.1000 0.0708 
    3  -429.1805  -105.3941  0.1000 0.0486 
    4  -429.3414  -105.4816  0.1000 0.0933 
    5  -429.4934  -105.5432  0.1000 0.0566 
    6  -429.6714  -105.5188  0.1000 0.1212 
    7  -429.8470  -105.5200  0.1000 0.0833 
    8  -429.9655  -105.6073  0.1000 0.0482 
    9  -430.1367  -105.6003  0.1000 0.0473 
    10  -430.2462  -105.6100  0.1000 0.0487 
Смежные вопросы