sklearn处理离散变量的问题——以决策树为例

最近做项目遇到的数据集中,有许多高维类别特征。catboost是可以直接指定categorical_columns的【直接进行ordered TS编码】,但是XGboost和随机森林甚至决策树都没有这个接口。但是在学习决策树的时候(无论是ID3、C4.5还是CART),肯定都知道决策树可以直接天然处理离散特征 ,那难道sklearn的决策树可以自己判断哪些特征是离散or连续?

决策树怎么处理连续特征

首先要明确,分类树和回归树,只是看label值是类别型还是连续型,和特征中是离散还是连续没有关系 。并不是说CART回归树不能使用离散的特征,只是CART回归树里并不使用gini系数来计算增益。【补充题外话:CART作为一个二叉树,每次分列并不会和ID3一样消耗这一列特征,只是消耗了该特征的一个分界点

关于特征为连续属性时CART决策树如何处理:二分法------先从小到大依次排序,然后依次划分,进行判定。具体可以参考这篇博客

sklearn里的决策树怎么处理类别特征的

答案是------不处理。在sklearn实现的CART树中,是用同一种方式 去处理离散与连续的特征的,即:把离散的特征也都当做连续的处理了,只能处理连续特征 和 做编码成数字的离散特征

可以看这个问题,我的理解是sklearn为了速度对CART的原来算法做了一定的改进,不再按照原来的方法处理离散特征,而是都统一成连续特征来处理了【所以没有categorical_columns接口】。

解决方案

如果想使用DT、RF、XGB,离散特征需要人为进行处理。可以看这个博客,对类别特征进行编码。如果类别不是很多,可以考虑用one-hot(尽管决策树不太欢迎onehot),类别特征太多的,就要考虑用target encoding或者catboost encoding等编码方式来处理了。

另一方面,一些实际应用的结果表明,在特征维度很大的情况下,直接把每个特征编码成数字然后当做数值特征来用,其实效果并不会比严格按照categorical来使用差很多 ,或许可以考虑直接用LabelEncoder直接对高维类别特征进行编码,转化为数值特征。
或者考虑换LGBM、CatBoost

相关推荐
Eward-an几秒前
AI视觉赋能汽车零部件质检:迁移科技Epic Eye系统落地案例(技术深度解析)
人工智能·科技·汽车
wuxuand1 分钟前
2026时序分类综述A Comprehensive Review of Time Series Classification
人工智能·深度学习·分类·数据挖掘
bubiyoushang8885 分钟前
基于PSO的列车速度优化MATLAB实现
开发语言·人工智能·matlab
LX5677711 分钟前
AI培训成本高、风险大,怎么控制?
人工智能
lisw0514 分钟前
当前AI科学基本问题的梳理与评价!
人工智能·深度学习·机器学习
骇客野人15 分钟前
机器学习线性回归算法是入门机器学习理解人工智能模型很好示例
人工智能·算法·机器学习
aiguangyuan17 分钟前
多模态AI实战:CLIP模型原理与代码深度剖析
人工智能·python·机器学习·nlp
大强同学19 分钟前
ai-pair:多智能体协同干活
人工智能·ai编程
十铭忘20 分钟前
GAN(生成对抗网络)和博弈论发展历史与研究者
人工智能·神经网络·生成对抗网络
大力财经21 分钟前
百度“养虾”,一场AI入口闪电战
人工智能·百度