Непоследовательные прогнозы от predict.gbm()

ОБНОВИТЬ:

Я попытался запустить код на https://rdrr.io/snippets/, и он работает нормально. Поэтому я подозреваю проблему с моей установкой R, но крайне беспокоит, что это может произойти без ошибок или предупреждений. Каковы наилучшие шаги для расследования этого? Я использую R 3.4.4 на Ubuntu 18.04 и gbm 2.1.4.


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

mydata <- structure(list(Count = c(1L, 3L, 1L, 4L, 1L, 0L, 1L, 2L, 0L, 0L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 0L, 2L, 3L, 1L, 4L, 3L, 0L, 4L, 1L, 2L, 1L, 1L, 0L, 2L, 1L, 4L, 1L, 5L, 3L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 2L, 0L, 0L, 1L, 1L, 1L, 0L, 3L, 1L, 1L, 0L, 3L, 1L, 1L, 1L, 1L, 2L, 3L, 2L, 2L, 0L, 0L, 3L, 5L, 1L, 2L, 1L, 1L, 0L, 0L, 1L, 2L, 1L, 3L, 1L, 1L, 0L, 2L, 2L, 1L, 3L, 3L, 2L, 0L, 0L, 1L, 2L, 1L, 0L, 2L, 0L, 0L, 4L, 4L, 2L), Treat1 = structure(c(10L, 14L, 8L, 2L, 3L, 12L, 1L, 10L, 6L, 2L, 11L, 11L, 15L, 1L, 8L, 3L, 13L, 9L, 9L, 11L, 1L, 8L, 14L, 5L, 10L, 8L, 15L, 11L, 7L, 6L, 13L, 11L, 7L, 1L, 1L, 2L, 7L, 12L, 5L, 1L, 8L, 1L, 9L, 8L,12L, 14L, 12L, 7L, 8L, 14L, 3L, 3L, 5L, 1L, 1L, 11L, 6L, 5L, 5L, 13L, 9L, 3L, 8L, 9L, 13L, 9L, 7L, 9L, 2L, 6L, 10L, 3L, 11L, 4L, 3L, 15L, 12L, 6L, 4L, 3L, 8L, 8L, 11L, 1L, 11L, 2L, 11L, 5L, 12L, 6L, 8L, 14L, 1L, 9L, 9L, 10L, 10L, 5L, 14L, 3L), .Label = c("D", "U", "R", "E", "C", "Y", "L", "O", "G", "T", "N", "J", "V", "X", "A"), class = "factor"), Treat2 = structure(c(15L, 13L, 7L, 8L, 2L, 5L, 15L, 4L, 2L, 7L, 6L, 2L, 3L, 14L, 10L, 7L, 7L, 14L, 11L, 7L, 6L, 1L, 5L, 13L, 11L, 6L, 10L, 5L, 3L, 1L, 7L, 9L, 6L, 10L, 5L, 11L, 15L, 9L, 7L, 11L, 10L, 2L, 3L, 3L, 5L, 11L, 8L, 6L,4L, 5L, 15L, 8L, 8L, 2L, 2L, 10L, 4L, 1L, 10L, 11L, 10L, 8L, 7L, 7L, 8L, 14L, 16L, 11L, 10L, 9L, 3L, 15L, 13L, 1L, 11L, 11L, 9L, 7L, 10L, 9L, 3L, 7L, 5L, 13L, 3L, 14L, 10L, 10L, 15L, 13L, 15L, 12L, 14L, 11L, 5L, 4L, 2L, 3L, 11L, 10L), .Label = c("B", "X", "R", "H", "L", "D", "U", "Q", "K", "C", "T", "V", "J", "E", "F", "A"), class = "factor"), Near = c(0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0), Co1 = c(2, 5, 1, 1, 0, 1, 1, 2, 1, 2, 5, 2, 1, 0, 1, 2, 6, 3, 3, 1, 2, 2, 3, 0, 1, 0, 1, 0, 2, 1, 0, 1, 2, 3, 1, 2, 2, 0, 0, 2, 3, 3, 1, 1, NA, 2, 0, 2, 1, NA, 1, 1, 0, 1, 2, 0, 2, 1, 1, 1, 2, 3, 1, 0, 4, 0, 0, 0, 2, 2, 1, 1,2, 0, 1, 2, 1, 0, 0, 0, 0, 2, 1, 2, 2, 2, 2, 1, 0, 1, 1, 1, 1, 1, 0, 2, 0, 0, 5, 1), Co2 = c(1, 1, 2, 2, 4, 1, 3, 0, 5, 2, 2, 4, 1, 1, 2, 1, 2, 3, 0, 2, 3, 3, 0, 3, 1, 0, 1, 1, 1, 2, 0, 1, 1, 1, 2, 3, 2, 2, 3, 0, 0, 0, 1, 2, NA, 1, 1, 1, 0, 2, 1, 1, 2, 5, 0, 2, 1, 4, 1, 1, 3, 0, 1, 1, 1, 1, NA, 0, 2, 1, 1, 3, 2, 1, 2, 1, 3, 1, 2, 0, 1, 5, 2, 2, 1, 2, 3, 4, 3, 1, 1, 0, 5, 1, 1, 0, 1, 1, 2, 0)), .Names = c("Count", "Treat1", "Treat2", "Near", "Co1", "Co2"), row.names = c(1759L, 959L, 1265L, 1504L, 630L, 1905L, 1885L, 1140L, 1187L, 1792L, 1258L, 1125L, 756L, 778L, 1718L, 1797L, 388L, 715L, 63L, 311L, 1492L, 1128L, 629L, 536L, 503L, 651L, 1684L, 1893L, 721L, 1440L, 1872L, 1444L, 1593L, 143L, 1278L, 1558L, 1851L, 1168L, 1829L, 386L, 365L, 849L, 429L, 155L, 11L, 1644L, 101L, 985L, 72L, 459L, 1716L, 844L, 1313L, 77L, 1870L, 744L, 219L, 513L, 644L, 831L, 338L, 284L, 211L, 1096L,243L, 1717L, 1881L, 1784L, 1017L, 992L, 45L, 707L, 489L, 1267L, 1152L, 1819L, 995L, 510L, 1350L, 1700L, 56L, 1754L, 725L, 1625L, 319L, 1818L, 1287L, 1634L, 953L, 1351L, 1787L, 923L, 917L, 484L, 886L, 390L, 1531L, 679L, 1811L, 1736L), class = "data.frame")

set.seed(12345)
require(gbm)

n.trees <- 10000

m1.gbm <- gbm(Count ~ Treat1 + Treat2 + Near + Co1 + Co2, data = mydata, distribution = "poisson", n.trees = n.trees)

head(predict(m1.gbm, newdata = mydata, n.trees = n.trees, type = "response"))
predict(m1.gbm, newdata = head(mydata), n.trees = n.trees, type = "response")

Возможно, я наивно предполагал, что последние строки выведут такие же результаты, но нет:

[1] 0.994297776 2.995972275 0.817366593 3.984539334 0.977805068 0.004828331
[1] 10.8603111  1.2439321  1.2515243 93.8925370  1.6301918  0.5146144

Чтобы посмотреть на конкретном примере:

mydata$predict.gbm <- predict(m1.gbm, newdata = mydata, n.trees = 10000, type = "response")
tail(mydata)

     Count Treat1 Treat2 Near Co1 Co2 predict.gbm
886      2      G      L    1   0   1 1.996664300
390      0      T      H    1   2   0 0.079447326
1531     0      T      X    0   0   1 0.008874954
679      4      C      R    1   0   1 4.023112604
1811     4      X      T    0   5   2 3.994436833
1736     2      R      C    0   1   0 2.003126597

.. и глядя только на последние 2 строки:

predict(m1.gbm, data.frame(Count=4, Treat1="X", Treat2="T", Near=0, Co1=5, Co2=2), n.trees = 10000, type = "response")
[1] 6.925626

predict(m1.gbm, data.frame(Count=2, Treat1="R", Treat2="C", Near=0, Co1=1, Co2=0), n.trees = 10000, type = "response")
[1] 5.381878

Я должен упустить что-то действительно очевидное здесь, и буду признателен за любую помощь в понимании этого!


person Robert Long    schedule 08.10.2018    source источник
comment
Похоже, это связано с вашими factor переменными. Вы должны убедиться, что используете правильные (то есть одинаковые) уровни.   -  person AntoniosK    schedule 08.10.2018
comment
Я получаю одинаковые значения в обеих строках с вашим mydata.   -  person nicola    schedule 08.10.2018
comment
Я тоже - обе строки одинаковые, я не могу воспроизвести вашу проблему...   -  person desertnaut    schedule 08.10.2018
comment
Я воспроизвожу проблему (для tail(mydata) у меня такое же последнее значение, но не предпоследнее...) Однако я не получаю значений, которые вы получаете. gbm версия 2.1.4, проверена на R3.5.1 и R3.4.2 (я получаю одинаковый результат в обоих сеансах)   -  person Cath    schedule 08.10.2018
comment
Я не могу воспроизвести ни одну из обнаруженных проблем - R 3.4.1, gbm 2.1.3 (Windows)   -  person desertnaut    schedule 08.10.2018
comment
@AntoniosK Я также подозревал проблему с факторами, но именно поэтому я сначала сделал прогноз для head(mydata), который должен сохранить факторы, верно?   -  person Robert Long    schedule 08.10.2018
comment
@desertnaut Я использую R 3.4.4 на Ubuntu 18.04 и gbm 2.1.4.   -  person Robert Long    schedule 08.10.2018
comment
@container Я понимаю, что вы имеете в виду, но похоже, что проблема заключается в факторных переменных и в том, как модель обрабатывает их при построении различных деревьев. Попробуйте удалить свои факторные переменные из формулы и снова проверьте весь процесс (т.е. используйте формулу Count ~ Near + Co1 + Co2)   -  person AntoniosK    schedule 08.10.2018
comment
@AntoniosK, пожалуйста, смотрите мое обновление в исходном сообщении. проблема, похоже, связана с моей установкой. Я собираюсь опубликовать новый вопрос об этом.   -  person Robert Long    schedule 08.10.2018
comment
У меня та же проблема, что и у вас, даже если прогнозируемые значения разные. Но когда я удаляю факторные переменные, он работает так, как ожидалось. Я использую R 3.5.1 в Windows и gbm 2.1.4   -  person AntoniosK    schedule 08.10.2018
comment
@AntoniosK да, если я уберу факторы, у меня тоже все работает нормально, однако это не объясняет, как это работает на 100% нормально на rdrr.io/snippets ?   -  person Robert Long    schedule 08.10.2018
comment
Они упоминают Loaded gbm 2.1.3, когда я использовал вашу ссылку. Хотя работает хорошо :)   -  person AntoniosK    schedule 08.10.2018
comment
@desertnaut проблема возникает только с gbm 2.1.4!   -  person Robert Long    schedule 08.10.2018
comment
@AntoniosK спасибо, что указали мне правильное направление. Проблема возникает только с 2.1.4!   -  person Robert Long    schedule 08.10.2018


Ответы (1)


Проблема, похоже, связана с версией gbm, которую я использую.

По умолчанию установлена ​​v 2.1.4

После того, как я удалил пакет и установил версию 2.1.3, все заработало, как и ожидалось.

Я опубликовал новый вопрос в связи с несоответствием между версиями пакетов

person Robert Long    schedule 08.10.2018