我有一个数据集,其中包括100多个国家。我想将它们包含在XGBoost模型中以进行分类预测。我知道One Hot Encoding是这个过程的首选,但我宁愿使用不会增加维度并且对新值具有弹性的二元分类,因此我正在尝试使用
我知道有一个
以下是从https://towardsdatascience.com/smarter-ways-to-encode-categorical-data-for-machine-learning-part-1-of-3-6dca2f71b159中获取的示例数据。
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
作为返回值。
这样做的主要原因是为了查看模型特征的重要性。我可以基于一列获取特征重要性,但这将返回一个列标识符,而不是最重要的类别的基础值。