首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用category_encoder包获取二进制编码的原始值

如何使用category_encoder包获取二进制编码的原始值
EN

Stack Overflow用户
提问于 2019-05-29 07:50:27
回答 1查看 618关注 0票数 5

我有一个数据集,其中包括100多个国家。我想将这些包含在XGBoost模型中,以进行分类预测。我知道One热编码是解决这个问题的首选方法,但我宁愿做一些不会增加太多维数并且对新值有弹性的事情,所以我尝试使用category_encoders包进行二进制分类。http://contrib.scikit-learn.org/categorical-encoding/binary.html

使用此编码帮助我的模型摆脱了使用基本的one-hot编码,但编码后如何返回到原始标签?

我知道inverse_transform方法,但它在整个数据帧上起作用。我需要一种方法,我可以把一个二进制值,或整数值,并返回原始值。

以下是取自:https://towardsdatascience.com/smarter-ways-to-encode-categorical-data-for-machine-learning-part-1-of-3-6dca2f71b159的一些示例数据

代码语言:javascript
复制
import numpy as np
import pandas as pd
import category_encoders as ce

# make some data
df = pd.DataFrame({
 'color':["a", "c", "a", "a", "b", "b"], 
 'outcome':[1, 2, 3, 2, 2, 2]})

# split into X and y
X = df.drop('outcome', axis = 1)
y = df.drop('color', axis = 1)

# instantiate an encoder - here we use Binary()
ce_binary = ce.BinaryEncoder(cols = ['color'])

# fit and transform and presto, you've got encoded data
ce_binary.fit_transform(X, y)

我想将值[0,0,1]1传递给一个函数,然后以值的形式返回a

这样做的主要原因是为了查看模型的功能重要性。我可以获得基于列的特征重要性,但这将返回一个列id,而不是最重要的类别的底层值。

EN

回答 1

Stack Overflow用户

发布于 2019-06-07 22:23:05

请注意,您参考的文章建议仅对序数数据使用二进制编码器-即具有关联顺序(小、中、大)的离散数据,而不是名义数据(红、白、蓝)。

如果您决定使用二进制编码器,颜色(或国家)的编码顺序将影响您的性能。例如,假设red=001、white=010和blue=011。当您应用ML算法时,它将看到红色和蓝色有一个共同的特征(特征3)。这可能不是您想要的。

在应用逆变换方面,您需要将逆变换应用于上面示例中的0,0,1,而不是"1“。"1“没有上下文是没有意义的。您应该能够将逆转换应用于数据中的单个记录(行),但不能应用于单个列。逆定标器将需要对具有变压器输出尺寸的对象进行操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56351380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档