【发布时间】:2019-04-19 23:21:04
【问题描述】:
我是一名精算学生,正在为即将在 12 月举行的预测分析考试做准备。练习的一部分是使用 caret 和 xgbTree 的提升来构建模型。见下面代码,caravan 数据集来自ISLR 包:
library(caret)
library(ggplot2)
set.seed(1000)
data.Caravan <- read.csv(file = "Caravan.csv")
data.Caravan$Purchase <- factor(data.Caravan$Purchase)
levels(data.Caravan$Purchase) <- c("No", "Yes")
data.Caravan.train <- data.Caravan[1:1000, ]
data.Caravan.test <- data.Caravan[1001:nrow(data.Caravan), ]
grid <- expand.grid(max_depth = c(1:7),
nrounds = 500,
eta = c(.01, .05, .01),
colsample_bytree = c(.5, .8),
gamma = 0,
min_child_weight = 1,
subsample = .6)
control <- trainControl(method = "cv",
number = 4,
classProbs = TRUE,
sampling = c("up", "down"))
caravan.boost <- train(formula = Purchase ~ .,
data = data.Caravan.train,
method = "xgbTree",
metric = "Accuracy",
trControl = control,
tuneGrid = grid)
expand.grid 和 trainControl 中的定义由问题指定,但我不断收到错误消息:
错误:采样方法仅用于分类问题
如果我从 trainControl 中删除采样方法,我会收到一个新错误,指出“度量精度不适用于回归模型”。如果我删除准确度指标,我会收到一条错误提示
无法计算回归的类概率”和“名称错误(res$trainingData) %in% as.character(form[[2]]):参数“form”丢失,没有默认值”
最终的问题是插入符号将问题定义为回归,而不是分类,即使目标变量设置为因子变量并且classProbs 设置为 TRUE。有人能解释一下如何告诉插入符号运行分类而不是回归吗?
【问题讨论】:
-
您能否将
dput(head(data.Caravan, 20))的结果添加到您的问题中?这将为我们提供源数据的前 20 条记录。这样我们就可以使用您的数据运行您的代码。欲了解更多信息,请阅读reproducible examples上的这篇文章 -
@phiver 感谢您的回复。数据集有 86 个字段。这可能太多了,无法粘贴在这里。大篷车数据集在 ISLR 包中可用。
-
@missuse 感谢您的评论。我不确定你不使用公式界面是什么意思,所以我尝试了几次不同的迭代,发现了一些有用的东西。我唯一改变的是“公式=购买〜”。到“购买~。”它奏效了。我不知道为什么。你怎么知道这样做的?