【发布时间】: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 方法,但它适用于整个数据框。我需要一种可以输入二进制或整数值并取回原始值的方法。
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