问题描述
我是R语言的新手,正在尝试学习和执行R语言中的ml。
从gbm
到caret
运行Error in { : task 1 Failed - "inputs must be factors"
时出现此错误。
使用相同的parameters
可以完美地运行于许多其他算法,例如-rf
,adaboost
等。
参考代码:
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"