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

news2024/12/24 3:02:47

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

在这里插入图片描述

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 编码分类特征往往是稀疏的,因此拆分算法通常会忽略 one-hot 特征,而倾向于稀疏程度较低的特征,这些特征可以带来更大的纯度增益。

现在,XGBoost 1.7 包含一项实验性功能,使您能够直接在分类数据上训练和运行模型,而无需手动编码。 这包括让 XGBoost 自动标记编码或单热编码数据的选项,以及一种最佳分区算法,用于有效地对分类数据执行拆分,同时避免单热编码的陷阱。 1.7 版还包括对缺失值的支持和最大类别阈值以避免过度拟合。

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

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

要使用新功能,您必须先加载一些数据。 对于这个例子,我使用了 Kaggle 型预测数据集

>>> 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())
  Temperature (K)  Luminosity(L/Lo)  Radius(R/Ro)  Absolute magnitude(Mv)  \
0             3068          0.002400        0.1700                   16.12  
1             3042          0.000500        0.1542                   16.60  
2             2600          0.000300        0.1020                   18.70  
3             2800          0.000200        0.1600                   16.65  
4             1939          0.000138        0.1030                   20.06  

   Star type Star color Spectral Class 
0          0        Red              M 
1          0        Red              M 
2          0        Red              M 
3          0        Red              M 
4          0        Red              M

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

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

接下来,将分类特征指定为类别 dtype。

>>> 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 模型时一样继续。 这适用于 CPU 和 GPU 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 在分类数据上的训练和推理体验。 有关更多示例,请参阅以下资源:

  • 分类数据入门
  • 使用 cat_in_the_dat 数据集训练 XGBoost

我们很高兴听到这项新功能如何让您的生活更轻松。 在接下来的几个月中,我们将进行更多工作,帮助您更好地理解基于树的算法的本质,这将在您未来的工作中大有裨益。

RAPIDS 团队始终与开源社区合作,以了解和解决新出现的需求。 如果您是开源维护者,有兴趣将 GPU 加速引入您的项目,请访问 GitHub 或 Twitter。 RAPIDS 团队很想了解潜在的新算法或工具包将如何影响您的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视觉SLAM十四讲ch4 李群和李代数笔记

视觉SLAM十四讲ch4 李群和李代数视觉SLAM十四讲ch4 李群和李代数李群和李代数基础指数映射与对数映射李代数求导与扰动模型视觉SLAM十四讲ch4 李群和李代数 李群和李代数基础 可以将SO3看成旋转矩阵集合,SE3看成变换矩阵集合 李代数是6个自由度的向量空间…

qsort函数的应用以及模拟实现

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍库函数qsort函数的模拟实现和应用 金句分享: ✨追…

Docker之部署Mysql

通过docker对Mysql进行部署。 如果没有部署过docker,看我之前写的目录拉取镜像运行容器开放端口拉取镜像 前往dockerHub官网地址,搜索mysql。 找到要拉取的镜像版本,在tag下找到版本。 拉取mysql镜像,不指定版本数&#xff0c…

04 Android基础--RelativeLayout

04 Android基础--RelativeLayout什么是RelativeLayout?RelativeLayout的常见用法:什么是RelativeLayout? 相对布局(RelativeLayout)是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式。 根据父容器定位 在相…

JavaWeb--RequestResponse

Request&Response1 Request和Response的概述2 Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 小结2.2.5 获取请求参数的通用方式2.3 IDEA快速创建Servlet2.4 请求参数中文乱码问题2.4.1 POST请…

智能家居Homekit系列一智能通断开关

智能通断器,也叫开关模块,可以非常方便地接入家中原有开关、插座、灯具、电器的线路中,通过手机App或者语音即可控制电路通断,轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及,越来越多的人想将自己的家改…

WebRTC系列分享 | WebRTC视频QoS全局技术栈

概述目前总结出WebRTC用于提升QoS的方法有:NACK、FEC、SVC、JitterBuffer、IDR Request、Pacer、Sender Side BWE、Probe、VFR(动态帧率调整策略)、AVSync(音视频同步)、动态分辨率调整。这几种方法在WebRTC架构分布如…

上海亚商投顾:沪指窄幅震荡 ChatGPT概念再度走高

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪沪指今日窄幅震荡,创业板指低开低走,午后跌幅扩大至1%,宁德时代一度跌近4%。6G概…

【架构师】零基础到精通——微服务治理

博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟! 博主小留言…

【java基础】一篇文章彻底搞懂lambda表达式

文章目录lambda表达式是什么lambda表达式的语法函数式接口初次使用深入理解方法引用 :: 用法快速入门不同形式的::情况1 object::instanceMethod情况2 Class::instanceMethod情况3 Class::staticMethod对于 :: 的一些示例及其注意事项构造器引用变量作用域使用外部变量定义内部…

web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架

1、 开发环境 win7 64 PyCharm 4.0.5 setuptools-29.0.1.zip 下载地址:setuptools-29.0.1.zip_免费高速下载|百度网盘-分享无限制 官方下载地址:setuptools PyPI python 3.3.2 mysql-connector-python-2.1.4-py3.3-win64 下载地址:mysq…

企业 Active Directory 自助服务

您的企业是否正在寻找一个全面的 Active Directory 自助服务解决方案,使用户能够在没有帮助台帮助的情况下满足自己的 Active Directory 需求?ADSelfService Plus 了解您的安全问题,并提供基于审批的自助服务工作流功能,使管理员能…

内网vCenter部署教程一

PS:因为交换机链路为trunk,安装先登录ESXI,将端口组改为管理vlan ID(1021) 一、双击镜像,打开文件夹,目录为F:\vcsa-ui-installer\win32,双击installer.exe 二、先设置语言为中文 三…

机器学习笔记之狄利克雷过程(三)随机测度的生成过程(折棍子过程)

机器学习笔记之狄利克雷过程——随机测度的生成过程[折棍子过程]引言回顾:狄利克雷过程——定义随机测度的生成过程从随机测度的生成过程观察标签参数α\alphaα与随机测度离散程度之间的关系引言 上一节使用公式推导的方式介绍了狄利克雷过程中标量参数α\alphaα…

云服务器ECS 什么是云服务器ECS?

云服务器ECS(Elastic Compute Service)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。 云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共…

【线性DP】猴子与香蕉

可恶,就差一点就能独立写出这道题了!4548. 猴子和香蕉 - AcWing题库题意:思路:设计状态的时候一开始不知道怎么设,后来试了一下发现这样设很合理因此在设状态的时候很多时候都要试一试当时间或空间吃不消时&#xff0c…

django ModelForm外鍵問題

背景 django在使用ModelForm時如果存在外鍵字段,默認是ChoiceField讓你選擇外鍵關聯表有的值,但是如果關聯表的數據很多的話選擇就很難找到選項。所以想能不能換成輸入框TextInput。 舉個例子 models.py 這裏建了兩個表,把用戶表的name作…

ERP的实施节省了公司人力吗?

业界一直有句老话:“不上ERP等死,上了ERP找死”。 可把ERP的尴尬处境说透了。 有人把ERP奉为信仰:“那些说ERP不好用的根本是没用明白。” 有人则认为ERP只是卖概念,冷嘲:“实施ERP的企业,估计一半都倒闭…

手机质保调到36个月,会对行业造成怎样的冲击?

2月17日,中国信通院发布数据显示,2022年全年国内市场手机出货量累计2.72亿部,同比下降22.6%。其中5G手机的出货量为2.14亿部,同比下降19.6%。这则数据打破了一些手机行业内的美好幻想:5G时代的到来,并没有涌…

哔哩哔哩自动生成视频上传,B站发布软件使用教程

哔哩哔哩自动生成视频上传,B站发布软件使用教程,全自动引流发帖软件介绍#引流发帖软件#全自动引流发帖#引流推广#拓客引流#爆粉软件 大家好,我是百收编辑狂潮老师,下面给大家讲一下 b 站上传软件它的一个使用方法。第一次使用的时…