当前位置: 首页 > 知识库问答 >
问题:

R-Catboost处理分类变量

阎祖鹤
2023-03-14

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

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

第1列和第4列至第85列为系数类型
第2列和第3列是数字。

我对catboost中的cat\u功能有点困惑。列车()。在参数中,我可以设置分类特征的向量。另外,我可以在catboost中设置。加载池

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)

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

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]"

有什么帮助吗?


共有2个答案

吕俊才
2023-03-14

我没有在R中尝试过CatBoost,但请参见本页的示例:

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

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

(这与Python API的工作方式不同,后者在Pythonfit()调用中传递cat_特性。)

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

蓝逸仙
2023-03-14

看看这个例子,cat_特性不应该进入参数

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
 类似资料:
  • 我最近开始使用CatBoost进行机器学习模型的快速原型制作,灵感来自CatBoost与XGBoost、LightGBM和h2o相比的出色性能基准。 由于XGBoost只能接受数字特征,所以CatBoost和XGBoost之间的比较需要对分类特征进行共同的预处理。我不完全清楚在基准测试实验中使用了什么样的预处理来编码分类特征,以及不使用简单的一次热编码的理由。 我试着读了实验的留档。据我所知,对分

  • 我有一个关于随机森林的问题。想象一下,我有用户与项目交互的数据。项目数量很大,大约10 000个。我的随机森林输出应该是用户可能与之交互的项目(如推荐系统)。对于任何用户,我想使用一个描述用户过去交互过的项目的功能。然而,将分类产品功能映射为一次热编码似乎非常缺乏内存效率,因为用户最多只能与几百个项目进行交互,有时甚至只有5个。 当其中一个输入特征是一个有大约10 000个可能值的分类变量,而输出

  • CatBoost 是由 Yandex 的研究人员和工程师开发的基于梯度提升决策树的机器学习方法,现已开源。CatBoost  在 Yandex 公司内广泛使用,用于排列任务、预测和提出建议。 CatBoost 是通用的,可应用于广泛的领域和各种各样的问题。 对比:

  • 我在Python工作。我对分类变量“城市”有一个问题。 我正在一个超过一百万行的大数据集上建立一个预测模型。我有100多种功能。其中之一是“城市”,由33000个不同的城市组成。 我使用例如XGBoost,其中我需要将分类变量转换为数字。Dummifying会导致功能的数量大幅增加。XGBoost(和我的20 gb RAM)无法处理此问题。 有没有其他方法来处理这个变量,除了例如。一个热编码,假人

  • 主要内容:命令行参数,set命令,使用数字值,局部与全局变量,使用环境变量批处理文件中有两种类型的变量。 其中一个参数是在调用批处理文件时可以传递的参数,另一个是通过命令完成的。 命令行参数 批处理脚本支持命令行参数的概念,其中参数可以在被调用时传递给批处理文件。参数可以通过变量,,等从批处理文件中调用。 以下示例显示了一个批处理文件,它接受3个命令行参数,并将它们回显到命令行屏幕。 如果上面的批处理脚本存储在一个名为的文件中,我们将运行该批处理 - 以下是批处理文件执

  • 本文向大家介绍C#图片处理类分享,包括了C#图片处理类分享的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#图片处理类的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。