0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

XGBoost中无需手动编码的分类特征

jf_pJlTbmA9 来源:NVIDIA 作者:NVIDIA 2023-07-05 16:30 次阅读

XGBoost 是一种基于决策树的集成 机器学习算法,基于梯度增强。然而,直到最近,它还不支持分类数据。分类特征在用于训练或推理之前必须手动编码。

在序数类别的情况下,例如学校成绩,这通常使用标签编码来完成,其中每个类别都分配一个与该类别的位置相对应的整数。等级 A 、 B 和 C 可分别分配整数 1 、 2 和 3 。

对于基数类别,类别之间没有序数关系,例如颜色,这通常使用一个热编码来完成。这是为类别特征包含的每个类别创建新的二进制特征的地方。具有红色、绿色和蓝色类别的单个分类特征将是一个热编码为三个二进制特征,一个代表每种颜色。

>>> import pandas as pd
>>> df = pd.DataFrame({"id":[1,2,3,4,5],"color":["red","green","blue","green","blue"]})
>>> print(df)
  id  color
0   1    red
1   2  green
2   3   blue
3   4  green
4   5   blue

>>> print(pd.get_dummies(df))
  id  color_blue  color_green  color_red
0   1           0            0          1
1   2           0            1          0
2   3           1            0          0
3   4           0            1          0
4   5           1            0          0

这意味着具有大量类别的分类特征可能会导致数十甚至数百个额外的特征。因此,经常会遇到内存池和最大 DataFrame 大小限制。

对于 XGBoost 这样的树学习者来说,这也是一种特别糟糕的方法。决策树通过找到所有特征的分裂点及其可能的值来训练,这将导致纯度的最大提高。

由于具有许多类别的一个热编码分类特征往往是稀疏的,因此分割算法 经常忽略 one-hot 特性有利于较少稀疏的特征,这些特征可以贡献更大的纯度增益。

现在, XGBoost 1.7 包含了一个实验 特征,它使您可以直接在分类数据上训练和运行模型,而无需手动编码。这包括让 XGBoost 自动标记编码或对数据进行一次热编码的选项,以及 optimal partitioning 算法,用于有效地对分类数据执行拆分,同时避免一次热解码的缺陷。 1.7 版还支持缺失值和最大类别阈值,以避免过度拟合。

这篇文章简要介绍了如何在包含多个分类特征的示例数据集上实际使用新特征。

使用 XGBoost 的分类支持预测恒星类型

要使用新功能,必须首先加载一些数据。在本例中,我使用了 Kaggle star type prediction dataset 。

>>> import pandas as pd
>>> import xgboost as xgb
>>> from sklearn.model_selection import train_test_split
>>> data = pd.read_csv("6 class csv.csv")
>>> print(data.head())

然后,将目标列(星形)提取到其自己的系列中,并将数据集拆分为训练和测试数据集。

>>> X = data.drop("Star type", axis=1)
>>> y = data["Star type"]
>>> X_train, X_test, y_train, y_test = train_test_split(X, y)

接下来,将分类特征指定为category数据类型。

>>> Y_train = y_train.astype("category")
>>> X_train["Star color"] = X_train["Star color"].astype("category")
>>> X_train["Spectral Class"] = X_train["Spectral Class"].astype("category")

现在,要使用新功能,必须在创建XGBClassifier对象时将enable_categorical参数设置为True。之后,继续训练 XGBoost 模型时的正常操作。这适用于 CPUGPU tree_methods。

>>> clf = xgb.XGBClassifier(
    tree_method="gpu_hist", enable_categorical=True, max_cat_to_onehot=1
)
>>> clf.fit(X_train, y_train)

XGBClassifier(base_score=0.5, booster='gbtree', callbacks=None,
              colsample_bylevel=1, colsample_bynode=1, colsample_bytree=1,
              early_stopping_rounds=None, enable_categorical=True,
              eval_metric=None, gamma=0, gpu_id=0, grow_policy='depthwise',
              importance_type=None, interaction_constraints='',
              learning_rate=0.300000012, max_bin=256, max_cat_to_onehot=4,
              max_delta_step=0, max_depth=6, max_leaves=0,
              min_child_weight=1, missing=nan, monotone_constraints='()',
              n_estimators=100, n_jobs=0, num_parallel_tree=1, 
              objective='multi:softprob', predictor='auto', random_state=0, 
              reg_alpha=0, ...)

最后,您可以使用您的模型生成预测,而无需对分类特征进行一次热编码或编码。

>>> X_test["Star color"] = X_test["Star color"]
    .astype("category")
    .cat.set_categories(X_train["Star color"].cat.categories)
>>> X_test["Spectral Class"] = X_test["Spectral Class"]
    .astype("category")
    .cat.set_categories(X_train["Spectral Class"].cat.categories)
>>> print(clf.predict(X_test))
[1 0 3 3 2 5 1 1 2 1 4 3 4 0 0 4 1 5 2 4 4 1 4 5 5 3 1 4 5 2 0 2 5 5 4 2 5
 0 3 3 0 2 3 3 1 0 4 2 0 4 5 2 0 0 3 2 3 4 4 4]

总结

我们演示了如何使用 XGBoost 对分类特征的实验支持,以改善 XGBoost 在分类数据上的训练和推理体验。。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4597

    浏览量

    101756
  • AI
    AI
    +关注

    关注

    87

    文章

    26472

    浏览量

    264098
  • 机器学习
    +关注

    关注

    66

    文章

    8134

    浏览量

    130577
收藏 人收藏

    评论

    相关推荐

    什么是物联网?物联网的特征是什么?有哪些分类

    什么是物联网?物联网的特征是什么?有哪些分类?物联网的关键技术有哪些?物联网技术在智慧城市的应用有哪些?
    发表于 06-15 08:04

    基于xgboost的风力发电机叶片结冰分类预测 精选资料分享

    xgboost中文叫做极致梯度提升模型,官方文档链接:https://xgboost.readthedocs.io/en/latest/tutorials/model.html2018年9月6日笔记
    发表于 07-12 06:58

    基于xgboost的风力发电机叶片结冰分类预测 精选资料下载

    xgboost中文叫做极致梯度提升模型,官方文档链接:https://xgboost.readthedocs.io/en/latest/tutorials/model.html2018年9月6日笔记
    发表于 07-12 06:44

    编码器的分类及其工作原理

    称为码盘,后者称为码尺。编码器的分类1.按按码盘的刻孔方式可分为绝对编码器和增量编码器绝对编码器由机械位置决定的每个位置是唯一的,它
    发表于 09-14 09:16

    操作系统的分类及其特征优劣

    文章目录:1.操作系统的分类及其特征优劣2.操作系统的发展历程1.操作系统的分类及其特征优劣2.操作系统的发展历程
    发表于 12-14 07:17

    基于快速低秩编码与局部约束的图像分类算法

    ;其次,在视觉词典中采取K最近邻( KNN)策略查找聚类中心对应的K个视觉单词,并将其组成对应的视觉词典;最后,使用快速低秩编码算法获得局部相似特征集合对应的特征编码。改进算法在Sce
    发表于 11-24 16:39 0次下载
    基于快速低秩<b class='flag-5'>编码</b>与局部约束的图像<b class='flag-5'>分类</b>算法

    基于栈式自编码的恶意代码分类算法

    针对传统机器学习方法不能有效地提取恶意代码的潜在特征,提出了基于栈式自编码( stacked auto en-coder,SAE)的恶意代码分类算法。其次从大量训练样本中学习并提取恶意代码纹理图像
    发表于 01-16 17:19 0次下载
    基于栈式自<b class='flag-5'>编码</b>的恶意代码<b class='flag-5'>分类</b>算法

    一种新的目标分类特征深度学习模型

    受限和高识别率要求,提取图像的局部方向梯度直方图( HOG)特征,构建稀疏自编码器栈对HOG特征进行深层次编码,设计Softmax多分类器对
    发表于 03-20 17:30 0次下载
    一种新的目标<b class='flag-5'>分类</b><b class='flag-5'>特征</b>深度学习模型

    面试中出现有关Xgboost总结

    介绍 Xgboost是GB算法的高效实现,xgboost中的基学习器除了可以是CART(gbtree)也可以是线性分类器(gblinear)
    发表于 03-20 16:48 4362次阅读

    XGBoost原理概述 XGBoost和GBDT的区别

    相比于经典的GBDT,xgboost做了一些改进,从而在效果和性能上有明显的提升。
    的头像 发表于 07-16 18:54 7.8w次阅读
    <b class='flag-5'>XGBoost</b>原理概述 <b class='flag-5'>XGBoost</b>和GBDT的区别

    面向二分类不平衡数据的XGBoost改进方法

    传统分类器在处理不平衡数据时,往往会倾向于保证多数类的准确率而牺牲少数类的准确率,导致少数类的误分率较高。针对这一问题,提出一种面向二分类不平衡数据的 XGBOOST( extreme
    发表于 05-28 16:29 4次下载

    基于XGBoost的树突状细胞算法综述

    树突状细胞算法(DCA)要求输入3类信号,需要通过人工选取或统计学等方式提前进行特征提取。为准确、高效地提取特征,提岀一种基于 Xgboost的DCA。通过使用ⅹ Gboost算法迭代生成决策树
    发表于 06-09 14:48 3次下载

    常见的11个分类变量编码方法

    机器学习算法只接受数值输入,所以如果我们遇到分类特征的时候都会对分类特征进行编码,本文总结了常见的11个
    的头像 发表于 11-28 15:45 2718次阅读

    编码器是什么?编码器有哪些分类及应用

    编码器是什么?编码器有哪些分类及应用;编码器是什么?在数字信号处理和通信系统中,编码器是一种重要的设备,用于将原始数据转换为字符序列或二进制
    的头像 发表于 05-18 11:08 3567次阅读
    <b class='flag-5'>编码</b>器是什么?<b class='flag-5'>编码</b>器有哪些<b class='flag-5'>分类</b>及应用

    XGBoost 2.0介绍

    ,还将介绍新机制和更新。 这是一篇很长的文章,因为我们首先从梯度增强决策树开始。 基于树的方法,如决策树、随机森林以及扩展后的XGBoost,在处理表格数据方面表现出色,这是因为它们的层次结构天生就善于对表格格式中常见的分层关系进行建模。它们在自动检测和整合特征之间复杂
    的头像 发表于 11-03 10:12 255次阅读
    <b class='flag-5'>XGBoost</b> 2.0介绍