Я пытаюсь проверить различные параметры в функции gbm of R, чтобы делать прогнозы с моими данными. У меня есть огромная таблица из 79866 строк и 1586 столбцов, где столбцы представляют собой подсчеты мотивов в ДНК, а строки указывают различные области / положения в ДНК и организме, к которому относятся эти подсчеты. Существует только 3 организма, но счет разделен по позициям (пик).
данные выглядят так:
chrII: 11889760_11890077 червь 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 * 0 0 0 0 0 ...
Поскольку у меня проблемы с память, которую я пока не знаю, как решить (из-за размера таблицы), поэтому я использую подмножество данных:
motifs.table.sub<-motifs.table[1:1000, 1:1000]
set.seed(123)
motifs_split.sub <- initial_split(motifs.table.sub, prop = .7)
motifs_train.sub <- training(motifs_split.sub)
Я создаю таблицу с различными параметрами для проверки
hyper_grid <- expand.grid(
shrinkage = c(.01, .1, .3),
interaction.depth = c(1, 3, 5),
n.minobsinnode = c(5, 10, 15),
bag.fraction = c(.65, .8, 1),
optimal_trees = 0,
min_RMSE = 0)
Затем я рандомизирую обучающие данные:
random_index.sub <- sample(1:nrow(motifs_train.sub), nrow(motifs_train.sub))
random_motifs_train.sub <- motifs_train.sub[random_index.sub, ]
проверяем различные параметры с 1000 деревьев
for(i in 1:nrow(hyper_grid)) {#
set.seed(123)
gbm.tune <- gbm(
formula = organism ~ .,
distribution = "gaussian", #default
data = random_motifs_train.sub,
n.trees = 1000,
interaction.depth = hyper_grid$interaction.depth[i],
shrinkage = hyper_grid$shrinkage[i],
n.minobsinnode = hyper_grid$n.minobsinnode[i],
bag.fraction = hyper_grid$bag.fraction[i],
train.fraction = 0.70,
n.cores = NULL,
verbose = V)
print(head(gbm.tune$valid.error))}
Проблема в том, что модель никогда не улучшается:
Iter TrainDeviance ValidDeviance StepSize Improve
1 нан нан 0,0100 нан
2 нан нан 0,0100 нан
3 нан нан 0,0100 нан
4 нан нан 0,0100 нан
5 нан нан 0,0100 нан
6 нан нан 0,0100 нан
7 нан нан 0,0100 нан
8 нан нан 0,0100 нан
9 нан нан 0,0100 нан
10 нан нан 0,0100 нан
И значения типа valid.error не рассчитываются, они остаются как «NA». Я попытался изменить размер подмножества данных, и то же самое происходит со всеми параметрами, которые я тестирую. Моя таблица данных огромна, и в ней много нулей, я убираю мотивы с низким количеством, но не думаю, что это помогло бы, поскольку только 127 мотивов из 1586 имеют менее 10 отсчетов.
очевидно TrainDeviance равно nan, если train.fraction не равен <1: <a href="https://stackoverflow.com/questions/23530165/gradient-boosting-using-gbm-in-r-with-distribution-bernoulli"> Градиентное усиление с использованием gbm в R с распределением = "bernoulli"
Но не в моем случае, я установил train.fraction на 0,7
Есть идеи, что я делаю не так?
спасибо!
PS: я следую этому уроку: http://uc-r.github.io/gbm_regression