首页 文章

eval(expr,envir,enclos)出错:找不到对象'PAY_0.1'(Boosting)

提问于
浏览
-2

我正在尝试应用一个提升模型,但我一直收到这个错误 . 任何帮助都将非常感激 . 如果您想知道,这是来自kaggle,UCI信用卡数据的数据集 .

DataSplit<-createDataPartition(UCIdata$default.payment.next.month,p=.8,list=FALSE)
boosttrain<-UCIdata[DataSplit,]
boosttest<-UCIdata[-DataSplit,]
gmbGrid2<-expand.grid(maxdepth=seq(1,10,1),iter=50,nu=seq(0.1,1,0.1))
boostingcontrol2<-trainControl(method="repeatedcv",classProbs = TRUE,summaryFunction = twoClassSummary)
gmbFit2<-train(default.payment.next.month~.,data=boosttrain[,2:25],method="ada",trControl=boostingcontrol2,verbose=FALSE,tuneGrid=gmbGrid2)

然后我把它拿出来 .

警告消息:1:在train.default(x,y,weights = w,...)中:度量“Accuracy”不在结果集中 . 将使用ROC . 2:在eval(expr,envir,enclos)中:Fold01.Rep1的预测失败:nu = 0.1,maxdepth = 1,iter = 50 eval中的错误(expr,envir,enclos):找不到对象'PAY_0.1'

在数据集中没有PAY_0.1,只有PAY_0,PAY_2,PAY_3,...,PAY_6 . PAY_0.1来自哪里?

1 回答

  • 1

    我猜PAY_0是数据集中的二进制/因子变量 . PAY_0.1是通过扩展此变量创建的虚拟变量,即PAY_0.0和PAY_0.1 . 很可能PAY_0只有很少的1,所以PAY_0.1只有很少的1 . 当与CV(重复cv)一起训练时,其中一个折叠可能没有任何1,因此这个错误 . 或者可能在构建深度为1的树时,没有树根据PAY_0.1变量而破损 .

    要解决问题,请执行以下操作:

    • 开始你的深度范围有点高 . 因此,如果您使用 maxdepth=seq(4,10,1) 而不是 maxdepth=seq(1,10,1) ,那么您可能不会遇到此问题 . 深度1树太浅 .

    • 检查PAY_0的分布 . 如果有太少的1 's then you can do upsampling of 1'或0的下采样 .

相关问题