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

6
我有一个数据集,其中包括100多个国家。我想将它们包含在XGBoost模型中以进行分类预测。我知道One Hot Encoding是这个过程的首选,但我宁愿使用不会增加维度并且对新值具有弹性的二元分类,因此我正在尝试使用category_encoders包。http://contrib.scikit-learn.org/categorical-encoding/binary.html 使用这种编码方式帮助我的模型比使用基本的One Hot Encoding更好,但是如何在编码后返回原始标签呢?
我知道有一个inverse_transform方法,但它作用于整个数据框。我需要一种方法,可以输入一个二进制或整数值,并获取原始值。
以下是从https://towardsdatascience.com/smarter-ways-to-encode-categorical-data-for-machine-learning-part-1-of-3-6dca2f71b159中获取的示例数据。
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作为返回值。

这样做的主要原因是为了查看模型特征的重要性。我可以基于一列获取特征重要性,但这将返回一个列标识符,而不是最重要的类别的基础值。

1个回答

1
请注意,您参考的文章建议仅针对序数数据使用二进制编码器 - 即具有与之相关联的顺序(小,中,大)的离散数据,而不是名义数据(红色,白色,蓝色)。
如果您决定使用二进制编码器,则颜色(或国家)编码的顺序将影响性能。例如,假设红色=001,白色=010,蓝色=011。当您应用ML算法时,它会发现红色和蓝色有一个共同的特征(特征3)。这可能不是您想要的。
在应用逆变换方面,您需要将逆变换应用于上面示例中的[0,0,1],而不是“1”。没有上下文,“1”是没有意义的。您应该能够将逆变换应用于数据中的单个记录(行),但不能应用于单个列。逆缩放器将需要操作具有转换器输出维度的对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接