【问题标题】:How to get original value for binary encoding using category_encoder package如何使用 category_encoder 包获取二进制编码的原始值
【发布时间】:2019-10-14 12:34:06
【问题描述】:

我有一个数据集,其中包含 100 多个国家/地区。我想将这些包含在 XGBoost 模型中以进行分类预测。我知道 One Hot Encoding 是解决这个问题的首选过程,但我宁愿做一些不会增加太多维度并且对新值有弹性的事情,所以我正在尝试使用 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

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,而不是最重要的类别的基础值。

【问题讨论】:

    标签: python machine-learning data-science xgboost one-hot-encoding


    【解决方案1】:

    请注意,您引用的文章建议仅将二进制编码器用于序数数据 - 即具有与其关联的顺序(小、中、大)的离散数据,而不是标称数据(红、白、蓝) .

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多