在train(caret包)中使用自己的模型?

5

我正试图使用Caret进行机器学习,但是我要用的包没有被包含在内,导致出错,你有什么建议吗?我使用了这个链接来开始我的工作。

bmsMeth<-list(type="Regression",library="BMS",loop=NULL,prob=NULL) 
prm<-data.frame(parameter="mprior.size",class="numeric",label="mprior.size")
bmsMeth$parameters<-prm
bmsGrid<-function(x,y,len=NULL){
out<-expand.grid(mprior.size=seq(2,3,by=len))
out
}
bmsMeth$grid<-bmsGrid
bmsFit<-function(x,y,param, lev=NULL) {bms(cbind(y,x),burn=5000,iter=100000,nmodel=1000,mcmc="bd",g="UIP",mprior.size=param$mprior.size)}
bmsMeth$fit<-bmsFit
bmsPred<-function(modelFit,newdata,preProcess=NULL,submodels=NULL){predict(modelFit,newdata)}
bmsMeth$predict<-bmsPred

library(caret)
data.train<-data.frame(runif(100),runif(100),runif(100),runif(100),runif(100))#synthetic data for testing
bms(cbind(data.train[,1],data.train[,-1]),burn=5000,iter=100000,nmodel=1000,mcmc="bd",g="UIP",mprior.size=2)#function out of caret is working

preProcess=c('center','scale')
myTimeControl <- trainControl(method = "timeslice",initialWindow = 0.99*nrow(data.train), horizon = 1, fixedWindow = FALSE)
tune <- train(data.train[,-1],data.train[,1],preProcess=preProcess,method = bmsMeth,tuneLength=2,metric= "RMSE",trControl =myTimeControl,type="Regression")

我遇到的错误:

在训练default(data.train[, -1], data.train[, 1], preProcess = preProcess)时出错,错误信息为:停止。此外还有警告信息:

1. 在eval(expr, envir, enclos)中,Training1的模型拟合失败:mprior.size=2,错误原因是方法$fit(x = x, y = y, wts = wts, param = tuneValue, lev = obsLevels)中存在未使用参数(wts = wts, last = last, classProbs = classProbs, type = "Regression")。

2. 在nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo)中,存在缺失值的重采样性能测量。


谢谢您的编辑! - Stéphanie C
你能否在一个小例子中重现你的问题? - Roman Luštrik
我以为我已经做了那个,你需要什么? - Stéphanie C
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Stéphanie C
@WhiteViking,你可能是对的,这不是同一种错误,但它不起作用,我肯定漏了什么。 - Stéphanie C
显示剩余4条评论
2个回答

3

显然,我只需要在函数中放入参数,即使我从未使用它们:

bmsFit<-function(x,y,param, lev=NULL, last, weights, classProbs, ...) {bms(data.frame(y,x),burn=5000,iter=100000,nmodel=1000,mcmc="bd",g="UIP",mprior.size=param$mprior.size)}

0

您的函数bms()似乎不存在...


你可以在图书馆(BMS)里找到它。 - Stéphanie C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接