BEYOND ONE-HOT: AN EXPLORATION OF CATEGORICAL VARIABLES

categorical-encoding库

项目地址:https://github.com/scikit-learn-contrib/categorical-encoding

Star:494

Fork:115

       这个库扩展了很多实现 scikit-learn 数据转换器接口的分类编码方法,并实现了常见的分类编码方法,例如单热编码和散列编码,也有更利基的编码方法,如基本编码和目标编码。这个库对于处理现实世界的分类变量来说很有用,比如那些具有高基数的变量。这个库还可以直接与 pandas 一起使用,用于计算缺失值,以及处理训练集之外的变换值。

encoder = ce.BinaryEncoder(cols=[...])

       在这篇文章中有一个概念出现,那就是维度的概念。简单来说,它只是数据集中的列数,但它对最终模型具有显着的下游影响。在极端情况下,“维度诅咒”的概念讨论了在高维空间中,有些东西会停止正常工作。即使在相对较低的维度问题中,具有更多维度的数据集也需要更多参数供模型理解,这意味着需要更多样本(就是更多行)来可靠地学习这些参数。如果数据集中的行数是固定的,则添加额外的维度而不添加更多的信息(更多的样本数据)到模型里,会对最终的模型精度产生不利影响。

        我们希望将分类变量编码为数字,但我们关注这个维度问题。显而易见的答案是只为每个类别分配一个整数(我们假设我们事先了解所有可能的类别)。这称为序数编码。它不会为问题添加任何维度,但是这种编码不会显示变量之间有序的意义。

这篇文章的作者采用了7种编码方式对3个常见的数据集进行了测试和评估,结果如下图:

 

 

 

 

        可以很清楚的看到,二进制编码表现良好,而且维度没有显着增加,而序数表现一直很差。

        二进制编码概念:首先将类别编码为序数,然后将这些整数转换为二进制代码,然后将该二进制字符串中的数字拆分为单独的列。 这样可以将数据编码为较少的维度,但距离会有一些失真。

        python代码尝试:

           

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值