Python中树模型如何处理类别变量的7种方法?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2330个文字,预计阅读时间需要10分钟。
在数据挖掘项目中,数据类型通常分为两类:有序的连续数值和有序的类别特征。对于XGBoost、GBDT等Boosting树模型,学习通常采用CART回归树,而CART树的输入通常仅支持连续型特征。
在数据挖掘项目的数据中,数据类型可以分为两种:有序的连续数值 和 无序的类别型特征。
对于xgboost、GBDT等boosting树模型,基学习通常是cart回归树,而cart树的输入通常只支持连续型数值类型的,像年龄、收入等连续型变量Cart可以很好地处理,但对于无序的类别型变量(如 职业、地区等),cart树处理就麻烦些了,如果是直接暴力地枚举每种可能的类别型特征的组合,这样找类别特征划分点计算量也很容易就爆了。
在本文中,我将列举了树模型对于类别型特征处理的常用方法,欢迎深入探讨,喜欢记得点赞、关注、收藏。
完整版代码、数据、技术交流文末获取
一、one-hot编码处理
我们可以直接对类别型特征做Onehot处理(这也是最常用的做法),每一类别的取值都用单独一位0/1来表示, 也就是一个“性别”类别特征可以转换为是否为“男”、“女” 或者“其他” 来表示,如下:
display(df.loc[:,['Gender_Code']].head())# onehot
pd.get_dummies(df['Gender_Code']).head()
但是onehot的重大缺点在于,对于取值很多的类别型特征,可能导致高维稀疏特征而容易导致树模型的过拟合。如之前谈到面对高维稀疏的onehot特征,一旦有达到划分条件,树模型容易加深,切分次数越多,相应每个切分出的子特征空间的统计信息越来越小,学习到的可能只是噪音(即 过拟合)。
本文共计2330个文字,预计阅读时间需要10分钟。
在数据挖掘项目中,数据类型通常分为两类:有序的连续数值和有序的类别特征。对于XGBoost、GBDT等Boosting树模型,学习通常采用CART回归树,而CART树的输入通常仅支持连续型特征。
在数据挖掘项目的数据中,数据类型可以分为两种:有序的连续数值 和 无序的类别型特征。
对于xgboost、GBDT等boosting树模型,基学习通常是cart回归树,而cart树的输入通常只支持连续型数值类型的,像年龄、收入等连续型变量Cart可以很好地处理,但对于无序的类别型变量(如 职业、地区等),cart树处理就麻烦些了,如果是直接暴力地枚举每种可能的类别型特征的组合,这样找类别特征划分点计算量也很容易就爆了。
在本文中,我将列举了树模型对于类别型特征处理的常用方法,欢迎深入探讨,喜欢记得点赞、关注、收藏。
完整版代码、数据、技术交流文末获取
一、one-hot编码处理
我们可以直接对类别型特征做Onehot处理(这也是最常用的做法),每一类别的取值都用单独一位0/1来表示, 也就是一个“性别”类别特征可以转换为是否为“男”、“女” 或者“其他” 来表示,如下:
display(df.loc[:,['Gender_Code']].head())# onehot
pd.get_dummies(df['Gender_Code']).head()
但是onehot的重大缺点在于,对于取值很多的类别型特征,可能导致高维稀疏特征而容易导致树模型的过拟合。如之前谈到面对高维稀疏的onehot特征,一旦有达到划分条件,树模型容易加深,切分次数越多,相应每个切分出的子特征空间的统计信息越来越小,学习到的可能只是噪音(即 过拟合)。

