从插入符中运行gbm时出错:{:任务1中的错误失败-“输入必须是因素” SVM模型

问题描述

我是R语言的新手,正在尝试学习和执行R语言中的ml。

gbmcaret运行Error in { : task 1 Failed - "inputs must be factors"时出现此错误

使用相同的parameters可以完美地运行于许多其他算法,例如-rfadaboost等。

参考代码

fitCtrl_2 <- trainControl(
  method = "cv",# repeats = 5,number = 10,savePredictions = "final",classprobs = TRUE,summaryFunction = twoClassSummary
) 

以下代码给出了错误

set.seed(123)

system.time(

model_gbm <- train(pull(y) ~  duration+nr.employed+euribor3m+pdays+emp.var.rate+poutcome.success+month.mar+cons.conf.idx+contact.telephone+contact.cellular+prevIoUs+age+cons.price.idx+month.jun+job.retired,data = train,method = "gbm",# Added for gbm
                  distribution="gaussian",# Added for gbm
                  metric = "ROC",bag.fraction=0.75,# Added for gbm
                  # tuneLenth = 10,trControl = fitCtrl_2)
)

以下代码可在相同数据上完美运行

SVM模型

set.seed(123)

system.time(

model_svm <- train(pull(y) ~  duration+nr.employed+euribor3m+pdays+emp.var.rate+poutcome.success+month.mar+cons.conf.idx+contact.telephone+contact.cellular+prevIoUs+age+cons.price.idx+month.jun+job.retired,method = "svmRadial",tuneLenth = 10,trControl = fitCtrl_2)
)

我曾就此问题浏览过其他SO帖子,但尚不清楚我到底需要做什么来解决它。

解决方法

您似乎正在进行分类,如果是这样,则分布应该是“ bernoulli”而不是“ gaussian”,下面是一个示例:

 const scrollToBottom = () => {
    // set the scroll top
    messagesEndRef.current.scrollTop = messagesEndRef.current.scrollHeight;
  };
  useEffect(scrollToBottom,[messages]);




// Update your reference
return (
    <div className="messagesWrapper" ref={messagesEndRef}>
      {messages.map(message => (
        <span key={message}>{message}</span>
      ))}
    </div>
  );

您收到一个错误:

set.seed(111)

df = data.frame(matrix(rnorm(1600),ncol=16))

colnames(df) = c("duration","nr.employed","euribor3m","pdays","emp.var.rate","poutcome.success","month.mar","cons.conf.idx","contact.telephone","contact.cellular","previous","age","cons.price.idx","month.jun","job.retired")

df$y = ifelse(runif(100)>0.5,"a","b")

mod = as.formula("y ~  duration+nr.employed+euribor3m+pdays+emp.var.rate+poutcome.success+month.mar+cons.conf.idx+contact.telephone+contact.cellular+previous+age+cons.price.idx+month.jun+job.retired")

model_gbm <- train(mod,data = df,method = "gbm",distribution="gaussian",metric = "ROC",bag.fraction=0.75,trControl = fitCtrl_2)

将其设置为bernoulli,就可以了:

Error in { : task 1 failed - "inputs must be factors"