Я устанавливаю начальное значение в модели Gradient Boosting Machine (GBM), но продолжаю получать разные прогнозы.

Я выполняю моделирование кредитного риска с использованием алгоритма Gradient Boosting Machine (GBM) и, делая прогнозы вероятности дефолта (PD), я продолжаю получать разные PD для каждого запуска, даже если в моем коде есть set.seed(1234).

С чем это может быть связано и как это исправить. Вот мой код ниже:

fitControl <- trainControl(
  method = "repeatedcv",
  number = 5,
  repeats = 5)

modelLookup(model='gbm')

#Creating grid
grid <- expand.grid(n.trees=c(10,20,50,100,500,1000),shrinkage=c(0.01,0.05,0.1,0.5),n.minobsinnode
                    = c(3,5,10),interaction.depth=c(1,5,10))

#SetSeed
set.seed(1234)


# training the model
model_gbm<-train(trainSet[,predictors],trainSet[,outcomeName],method='gbm',trControl=fitControl,tuneGrid=grid)
# summarizing the model
print(model_gbm)

plot(model_gbm)

#using tune length
model_gbm<-train(trainSet[,predictors],trainSet[,outcomeName],method='gbm',trControl=fitControl,tuneLength=10)

print(model_gbm)

plot(model_gbm)

#Checking variable importance for GBM
#Variable Importance
library(gbm)
varImp(object=model_gbm, numTrees = 50)

#Plotting Varianle importance for GBM
plot(varImp(object=model_gbm),main="GBM - Variable Importance")

#Checking variable importance for RF
varImp(object=model_rf)

#Plotting Varianle importance for Random Forest
plot(varImp(object=model_rf),main="RF - Variable Importance")

#Checking variable importance for NNET
varImp(object=model_nnet)

#Plotting Variable importance for Neural Network
plot(varImp(object=model_nnet),main="NNET - Variable Importance")

#Checking variable importance for GLM
varImp(object=model_glm)

#Plotting Variable importance for GLM
plot(varImp(object=model_glm),main="GLM - Variable Importance")

#Predictions
predictions<-predict.train(object=model_gbm,testSet[,predictors],type="raw")
table(predictions)

confusionMatrix(predictions,testSet[,outcomeName])

PD <- predict.train(object=model_gbm,credit_transformed[,predictors],type="prob")

r gbm
person N. Fungura    schedule 14.03.2019    source источник
comment
Привет! Постарайтесь сделать свой пример минимальным, удалите все ненужные части, сосредоточьтесь на своей проблеме и сделайте ее воспроизводимой (мы должны иметь возможность скопировать/вставить ваш пример и запустить его со своей стороны, чтобы увидеть, как вы сказали, разные прогнозы на каждом бежать).   -  person RLave    schedule 14.03.2019
comment
Это привлечет больше внимания к вашему ответу. Вы можете использовать поддельные данные, некоторые классические (доступные в baseR) наборы данных (mtcars,iris) или dput() небольшую часть ваших данных для создания своего примера.   -  person RLave    schedule 14.03.2019


Ответы (1)


Я предполагаю, что вы используете train() из caret. Я рекомендую вам использовать более сложный, но настраиваемый trainControl() из того же пакета. Как видно из ?trainControl, параметр seeds:

необязательный набор целых чисел, который будет использоваться для установки начального значения на каждой итерации передискретизации. Это полезно, когда модели запускаются параллельно. Значение NA предотвратит установку начальных значений в рабочих процессах, а значение NULL установит начальные значения с использованием случайного набора целых чисел. В качестве альтернативы можно использовать список. В списке должно быть B+1 элементов, где B — количество повторных выборок, если метод не является «boot632», в этом случае B — это количество повторных выборок плюс 1. Первые B элементов списка должны быть векторами целых чисел длины M, где M - количество оцениваемых моделей. Последний элемент списка должен быть только одним целым числом (для окончательной модели). См. раздел «Примеры» ниже и раздел «Подробности».

Исправление seeds должно помочь. Пожалуйста, в следующий раз постарайтесь предложить dput o аналог ваших данных для воспроизводимости. Лучший!

person LocoGris    schedule 14.03.2019
comment
В качестве альтернативы установите allowParallel = FALSE. - person Roland; 14.03.2019