xgboost等Tree-Model 对于特征是否需要进行one-hot编码的必要性分析

附:2023年数据资源, 推荐算法代码白皮书下载:

关注WX公众号: commindtech77, 获得数据资产相关白皮书下载地址

回复关键字:推荐系统
下载《新闻资讯个性化推荐系统源码及白皮书》

1. 回复关键字:数据资源入表白皮书
下载 《2023数据资源入表白皮书》
2. 回复关键字:光大银行
下载 光大银行-《商业银行数据资产会计核算研究报告》
3. 回复关键字:数据资产估值
下载 《商业银行数据资产估值白皮书》
4. 回复关键字:上海银行
下载 上海银行《商业银行数据资产体系白皮书》
5. 回复关键字:商业银行数据资产管理
下载 《商业银行数据资产管理体系建设实践报告》

知乎主页申小明77 - 知乎

参考链接:

数据预处理:独热编码(One-Hot Encoding)_onehot编码怎么训练-CSDN博客

xgboost 对所有的输入特征都是当做数值型对待,所以你给定的数据也要是指定的数据类型

对于数据缺失或者稀疏,xgboost 都可以自己处理

纠结于 one-hot 编码问题主要是将分类信息转化为一定长度索引的二进制数据

假设当前的数据类型是 annimal={‘panda’,’cat’,’dog’}

经过 one-hot 编码可能就变成

[[1,0,0],

[0,1,0],

[0,0,1]]

上述是一个 3*3 矩阵向量

对于 xgboost 而言,将其解释为 3 个特征变量,animal0,animal1,animal2,这三个共同表征 animal

最终在 get_fscore 函数中计算特征的重要性也会将其分开来看,可能 animal0 占据着更重要的地位


xgboost 树模型其实是不建议使用 one-hot 编码,在 xgboost 上面的 issue 也提到过,相关的说明如下

I do not know what you mean by vector. xgboost treat every input feature as numerical, with support for missing values and sparsity. The decision is at the user

So if you want ordered variables, you can transform the variables into numerical levels(say age). Or if you prefer treat it as categorical variable, do one hot encoding.

在另一个issues上也提到过(tqchen commented on 8 May 2015):

One-hot encoding could be helpful when the number of categories are small( in level of 10 to 100). In such case one-hot encoding can discover interesting interactions like (gender=male) AND (job = teacher).

While ordering them makes it harder to be discovered(need two split on job). However, indeed there is not a unified way handling categorical features in trees, and usually what tree was really good at was ordered continuous features anyway..

总结起来的结论,大至两条:

  • 1.对于类别有序的类别型变量,比如 age 等,当成数值型变量处理可以的。对于非类别有序的类别型变量,推荐 one-hot。但是 one-hot 会增加内存开销以及训练时间开销。
  • 2.类别型变量在范围较小时(tqchen 给出的是[10,100]范围内)推荐使用

为什么基于树模型不太需要 one-hot

one-hot 编码为什么可以解决类别型数据的离散值问题

首先,one-hot 编码是 N 位状态寄存器为 N 个状态进行编码的方式

eg:高、中、低不可分,→ 用 0 0 0 三位编码之后变得可分了,并且成为互相独立的事件

→ 类似 SVM 中,原本线性不可分的特征,经过 project 之后到高维之后变得可分了

GBDT 处理高维稀疏矩阵的时候效果并不好,即使是低维的稀疏矩阵也未必比 SVM 好

Tree Model 不太需要 one-hot 编码

对于决策树来说,one-hot 的本质是增加树的深度

tree-model 是在动态的过程中生成类似 One-Hot + Feature Crossing 的机制

1. 一个特征或者多个特征最终转换成一个叶子节点作为编码 ,one-hot 可以理解成三个独立事件

2. 决策树是没有特征大小的概念的,只有特征处于他分布的哪一部分的概念

one-hot 可以解决线性可分问题 但是比不上 label econding

one-hot 降维后的缺点:

降维前可以交叉的降维后可能变得不能交叉

树模型的训练过程:

从根节点到叶子节点整条路中有多少个节点相当于交叉了多少次,所以树的模型是自行交叉

eg:是否是长的 { 否(是→ 柚子,否 → 苹果) ,是 → 香蕉 } 园 cross 黄 → 形状 (圆,长) 颜色 (黄,红) one-hot 度为 4 的样本

使用树模型的叶子节点作为特征集交叉结果可以减少不必要的特征交叉的操作 或者减少维度和 degree 候选集

eg 2 degree → 8 的特征向量 树 → 3 个叶子节点

树模型:Ont-Hot + 高 degree 笛卡尔积 + lasso 要消耗更少的计算量和计算资源

这就是为什么树模型之后可以 stack 线性模型

n*m 的输入样本 → 决策树训练之后可以知道在哪一个叶子节点上 → 输出叶子节点的 index → 变成一个 n*1 的矩阵 → one-hot 编码 → 可以得到一个 n*o 的矩阵(o 是叶子节点的个数) → 训练一个线性模型

典型的使用: GBDT + RF

优点 : 节省做特征交叉的时间和空间

如果只使用 one-hot 训练模型,特征之间是独立的

对于现有模型的理解:(G(l(张量))):

其中:l(·)为节点的模型

G(·)为节点的拓扑方式

神经网络:l(·)取逻辑回归模型

G(·)取全连接的方式

决策树: l(·)取 LR

G(·)取树形链接方式

创新点: l(·)取 NB,SVM 单层 NN ,等

G(·)取怎样的信息传递方式


参考资料

数据预处理:独热编码(One-Hot Encoding)_onehot编码怎么训练-CSDN博客

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值