在对数据进行编码的过程中,经常会遇到一些非结构化的字段(如列表、文本),或者高维稀疏的字段。

在使用树模型的过程中,上述字段对树模型很不友好,会增加树模型的训练时间,一般情况需要通过人工特征提取,然后进行。

有没有一种可以适合树模型编码的操作呢?在树模型中可以通过叶子节点的次序作为进行编码,在Kaggle中称为Tree Categorical Embedding。

Tree Categorical Embedding

在训练完树模型之后,可以通过对模型进行预测,通过节点逻辑的判断从根节点到叶子节点。

此时叶子节点中包含的样本类别(或标签均值)为最终的预测结果。这里想要具体的index,也就是样本预测到第几个叶子节点中。

在XGBoost中,拥有多棵树。则一个样本将会被编码为多个index,最终可以将index作为额外的类别特征再加入到模型训练。

具体API

XGBoost

使用Learning API,设置pred_leaf参数

import xgboost as xgb
from sklearn.datasets import make_classificationX, Y = make_classification(1000, 20)
dtrain = xgb.DMatrix(X, Y)
dtest = xgb.DMatrix(X)param = {'max_depth':10, 'min_child_weight':1, 'learning_rate':0.1}
num_round = 200
bst = xgb.train(param, dtrain, num_round)
bst.predict(dtest, pred_leaf=True)

LightGBM

使用sklearn API或者Learning API,设置pred_leaf参数

import lightgbm as lgb
from sklearn.datasets import make_classificationX, Y = make_classification(1000, 20)
dtrain = lgb.Dataset(X, Y)
dtest = lgb.Dataset(X)param = {'max_depth':10, 'min_child_weight':1, 'learning_rate':0.1}
num_round = 200
bst = lgb.train(param, dtrain, num_round)
bst.predict(X, pred_leaf=True)

CatBoost

使用calc_leaf_indexes函数

import catboost as cab
from sklearn.datasets import make_classificationX, Y = make_classification(1000, 20)
clf = cab.CatBoostClassifier(iterations=200)
clf.fit(X, Y)
clf.calc_leaf_indexes(X)

使用细节

  1. leaf index预测维度与具体树个数相关,也就是与具体的round相关。

  2. leaf index的预测结果为类别类型。

  3. leaf index建议交叉验证编码,避免自己训练并编码自己。

交叉验证实现:https://www.kaggle.com/mmueller/categorical-embedding-with-xgb/script

学习数据竞赛,组队参赛,交流分享
添加

【数据竞赛】Kaggle知识点:树模型特征Embedding相关推荐

  1. 【数据竞赛】可能是全网特征工程实操最通透的...

    之前在我写的特征工程方法论里面提了一嘴,用automl搜索+人工启启发式可以高效稳定地完成特征工程,并取得不错的效果. 原文:可能是全网写特征工程最通透的... 不过这篇文章最大的问题是太过于侧重于是 ...

  2. 【数据竞赛】基于LSTM模型实现共享自行车需求预测

    公众号:尤而小屋 作者:Peter 编辑:Peter 今天给大家带来一篇新的kaggle数据分析实战案例:基于长短期记忆网络(LSTM)模型的伦敦自行车需求预测分析.本文的两个亮点: 高级可视化:本文 ...

  3. 树模型特征重要性评估方法

    前言 在特征的选择过程中,如果学习器(基学习器)是树模型的话,可以根据特征的重要性来筛选有效的特征.本文是对Random Forest.GBDT.XGBoost如何用在特征选择上做一个简单的介绍. 各 ...

  4. 【数据竞赛】懒人特征筛选算法!

    作者:杰少 Kaggle竞赛知识点--RFE! 简 介 Recursive Feature Elimination(RFE)算法是数据竞赛中最为流行的特征筛选方案之一,和我们平时在做try and e ...

  5. [机器学习] 树模型(xgboost,lightgbm)特征重要性原理总结

    在使用GBDT.RF.Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法 一 计算特征重要性方法 首先,目前计算特征 ...

  6. 树模型(六):XGBoost

    0 XGB vs GBDT 正则项:在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模型的复杂度,有利于防止过拟合,从而提高模型的泛化能力. 二阶导数:GBDT在模型训练时只使用了 ...

  7. MathorCup大数据竞赛-北京移动用户体验影响因素问题思考

    针对本次2022年MathorCup大数据竞赛-赛道B初赛题是关于北京移动用户体验影响因素问题.问题一,二呈递进关系.客户语音业务和上网业务满意度研究内容方法大同小异.这里给出客户语音业务满意度研究内 ...

  8. 张俊林:推荐系统排序环节特征 Embedding 建模

    每天给你送来NLP技术干货! 分享嘉宾:张俊林博士 新浪微博 编辑整理:刘一全 出品平台:DataFunTalk 导读:随着深度学习在推荐系统应用的发展,特征 Embedding 建模的重要性已经成为 ...

  9. python+Treelite:Sklearn树模型训练迁移到c、java部署

    受本篇启发: Treelite:树模型部署加速工具(支持XGBoost.LightGBM和Sklearn) Coggle,公众号:Coggle数据科学Treelite:树模型部署加速工具(支持XGBo ...

最新文章

  1. python的TCP编程
  2. 【原】Sharepoint安装:此服务器不是该搜索应用程序的索引器
  3. 前端性能优化之防抖-debounce
  4. [SDOI2013]直径 (树的直径,贪心)
  5. C2248编译错误的原因和解决--VC6向VC7.1迁移真是累死人,N多编译错误
  6. strcpy函数的实现
  7. 小程序开发入门教程 一
  8. CSS3学习笔记--line-height:150%与line-height:1.5的真正区别
  9. 基于matlab的微分例题,matlab程序设计常微分方程编程例题答案数学.doc
  10. 金蝶EAS初始化操作手册之科目表
  11. android更改深色模式,安卓微信怎么切换深色模式
  12. Fragment运行时错误
  13. Java实现支付宝网页支付
  14. Web前端从开始到入门(2)
  15. Window10主硬盘更换及系统重装
  16. 微信屏蔽网址解决办法 微信网址被屏蔽了红了照样打开
  17. MATLAB实战——方差分析
  18. SpringBoot整合!docker更新镜像名称
  19. 用 ECharts 做出漂亮的数据统计图
  20. 美国大学排名之本科中最用功的学校top15

热门文章

  1. css 让div 的高度和屏幕的高度一样
  2. 【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例
  3. javascript 浮点数加减乘除计算会有问题, 整理了以下代码来规避这个问题
  4. halcon学习笔记——机器视觉工程应用的开发思路
  5. 浅析Facebook LibraBFT与比原链Bystack BBFT共识
  6. web渗透漏洞实例讲解视频课程
  7. MAC通过SSH使用PEM文件登录
  8. Objective-C开发编码规范
  9. BI报表开发之环境搭建(二)
  10. android 内存播放视频播放器,视频流媒体播放器EasyPlayer-RTSP安卓版在RK3399上运行APP崩溃问题...