2017-09-12 9 views
1

如果我理解正确catboost,我们需要调整nrounds就像在xgboost,使用CV。我看到在official tutorial在文献[8]如何使用`catboost`选择nrounds?

params_with_od <- list(iterations = 500, 
         loss_function = 'Logloss', 
         train_dir = 'train_dir', 
         od_type = 'Iter', 
         od_wait = 30) 
model_with_od <- catboost.train(train_pool, test_pool, params_with_od) 

这导致最佳iterations = 211

我的问题是下面的代码:

  • 难道纠正:这命令使用test_pool来选择最好的iterations而不是使用交叉验证?
  • 如果是,catboost是否提供命令以从CV中选择最佳iterations,或者我需要手动执行此操作?

回答

0

Catboost正在进行交叉验证以确定最佳迭代次数。 train_pool和test_pool都是包含目标变量的数据集。在本教程早些时候他们写

train_path = '../R-package/inst/extdata/adult_train.1000' 
test_path = '../R-package/inst/extdata/adult_test.1000' 

column_description_vector = rep('numeric', 15) 
cat_features <- c(3, 5, 7, 8, 9, 10, 11, 15) 
for (i in cat_features) 
    column_description_vector[i] <- 'factor' 

train <- read.table(train_path, head=F, sep="\t", colClasses=column_description_vector) 
test <- read.table(test_path, head=F, sep="\t", colClasses=column_description_vector) 
target <- c(1) 
train_pool <- catboost.from_data_frame(data=train[,-target], target=train[,target]) 
test_pool <- catboost.from_data_frame(data=test[,-target], target=test[,target]) 

当您执行catboost.train(train_pool,TEST_POOL,params_with_od)train_pool用于培训和TEST_POOL用于通过交叉验证,以确定迭代的最佳数量。

现在,你是对的混淆,因为在稍后的教程,他们再次使用TEST_POOL和拟合模型作出的预测(model_best类似于model_with_od,但使用不同的过拟合检测IncToDec):

prediction_best <- catboost.predict(model_best, test_pool, type = 'Probability') 

这可能是不好的做法。现在他们可能会用它的IncToDec过度配合检测器逃避它 - 我不熟悉它背后的数学 - 但是对于Iter型过拟合检测器,您需要单独的火车,验证和测试数据集(如果您想成为在保存方面,对IncToDec过度配合检测器执行相同操作)。然而,它只是一个教程,展示了这些功能,所以我不会对他们已经使用过的数据太迂腐。

这里的过度拟合探测器的链接,更详细一点: https://tech.yandex.com/catboost/doc/dg/concepts/overfitting-detector-docpage/

+0

那么确实是1倍交叉验证? – Metariat

+0

是的,这是正确的 – ftiaronsem

1

使用插入符号交叉验证。请关注In [12]tutorial

+0

请详细说明一点,而不是只涉及外部链接。 –