我在梯度提升机(GBM)模型上设置了种子,但是我不断得到不同的预测

时间:2019-03-14 07:54:15

标签: r gbm

我正在使用梯度提升机(GBM)算法进行信用风险建模,并且在对违约概率(PD)进行预测时,即使我的代码中有set.seed(1234),每次运行我都会不断获得不同的PD

什么可能导致这种情况发生,以及如何解决。这是我的代码如下:

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")

1 个答案:

答案 0 :(得分:1)

我假设您正在使用train()中的caret。 我建议您从同一软件包中使用更复杂但可自定义的trainControl()。 从?trainControl中可以看到,参数seeds为:

  

一组可选的整数,将用于在每个整数处设置种子   重采样迭代。在运行模型时这很有用   平行。 NA的值将阻止种子在   工作进程,而NULL值将使用   随机整数集。或者,可以使用列表。名单   应该有B + 1个元素,其中B是重采样数,除非   方法是“ boot632”,在这种情况下,B是重采样数加1。   列表的前B个元素应该是整数的向量   长度M,其中M是要评估的模型数。最后   列表的元素只需要是一个整数(对于最后一个   模型)。请参阅下面的示例部分和详细信息部分。

修复seeds应该可以解决问题。 请下次尝试提供与数据类似的dput o以便可重现。 最好!