首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R Catboost用于处理分类变量

R Catboost用于处理分类变量
EN

Stack Overflow用户
提问于 2020-02-28 03:37:47
回答 2查看 237关注 0票数 1

我有一个关于Catboost的问题。是否要在建模之前对分类进行预处理?

如果我有86个变量,包括1个目标变量。在这85个变量中,有2个数值变量和83个分类变量(Factor类型)。目标变量是二进制因数,1或0。

第1列和第4列到第85列是因数类型。

第2列和第3列是数字。

我对catboost.train()中的cat_features有点迷惑。在参数中,我可以设置分类特征的向量。另外,我可以在catboost.load_pool中进行设置。

代码语言:javascript
复制
library(Catboost)
library(dplyr)

X_train <- train %>% select(-Target)
y_train <- (as.numeric(unlist(train[c('Target')])) - 1)
X_valid <- test %>% select(-Target)
y_valid <- (as.numeric(unlist(test[c('Target')])) - 1)

train_pool <- catboost.load_pool(data = X_train, label = y_train, cat_features = c(0,3:84))
test_pool <- catboost.load_pool(data = X_valid, label = y_valid, cat_features = c(0,3:84))

params <- list(iterations=500,
               learning_rate=0.01,
               depth=10,
               loss_function='RMSE',
               eval_metric='RMSE',
               random_seed = 1,
               od_type='Iter',
               metric_period = 50,
               od_wait=20,
               use_best_model=TRUE,
               cat_features = c(0,3:84))

catboost.train(train_pool, test_pool, params = params)

然而,在我运行上面的代码之后,我得到了一个错误:

代码语言:javascript
复制
Error in catboost.train(train_pool, test_pool, params = params) : 
  catboost/libs/options/plain_options_helper.cpp:339: Unknown option {cat_features} with value "[0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84]"

有什么帮助吗?

EN

回答 2

Stack Overflow用户

发布于 2021-01-10 12:30:12

看看这个例子,列表不应该只放在catboost.load_pool()中的参数<- cat_features ()中。

代码语言:javascript
复制
library(catboost)

countries = c('RUS','USA','SUI')
years = c(1900,1896,1896)
phone_codes = c(7,1,41)
domains = c('ru','us','ch')

dataset = data.frame(countries, years, phone_codes, domains, stringsAsFactors = T)
glimpse(dataset)

label_values = c(0,1,1)

fit_params <- list(iterations = 100,
                   loss_function = 'Logloss',
                   ignored_features = c(4,9),
                   border_count = 32,
                   depth = 5,
                   learning_rate = 0.03,
                   l2_leaf_reg = 3.5)

pool = catboost.load_pool(dataset, label = label_values, cat_features = c(0,3))
model <- catboost.train(pool, params = fit_params)
model
票数 1
EN

Stack Overflow用户

发布于 2020-08-30 04:49:22

我还没有在R中尝试过CatBoost,但请参阅此页面上的示例:

https://catboost.ai/docs/concepts/r-reference_catboost-train.html

您似乎只在load_pool()调用中传递分类变量,而在train()调用中传递而不是

(这与Python API的工作方式不同,Python API在Python fit()调用中传递cat_features。)

建议:将所有分类变量分组在最左侧的列中。这样你就有了一个更简单的向量创建。我还检查了我的代码,以确保我做得正确……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60440590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档