cbu*_*ton 6 python machine-learning xgboost data-science one-hot-encoding
我有一个数据集,其中包含 100 多个国家/地区。我想将这些包含在 XGBoost 模型中以进行分类预测。我知道 One Hot Encoding 是解决这个问题的首选过程,但我宁愿做一些不会增加维数太多并且能够适应新值的事情,所以我正在尝试使用该category_encoders包进行二进制分类。http://contrib.scikit-learn.org/categorical-encoding/binary.html
使用这种编码帮助我的模型摆脱了使用基本的单热编码的问题,但是编码后如何恢复到原始标签?
我知道该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)
Run Code Online (Sandbox Code Playgroud)

我想将值[0,0,1]或传递1到函数中并a作为值返回。
这样做的主要原因是为了查看模型的特征重要性。我可以根据列获取特征重要性,但这会给我返回一个列 ID,而不是最重要的类别的基本值。
请注意,您引用的文章建议仅对序数数据使用二进制编码器 - 即具有与之关联的顺序(小、中、大)的离散数据,而不是名义数据(红、白、蓝)。
如果您决定使用二进制编码器,则颜色(或国家/地区)的编码顺序将影响您的性能。例如,假设红色=001、白色=010、蓝色=011。当您应用 ML 算法时,它会发现红色和蓝色有一个共同特征(特征 3)。这可能不是您想要的。
在应用逆变换方面,您需要将逆变换应用到上面示例中的 [0,0,1],而不是“1”。如果没有上下文,“1”就没有意义。您应该能够将逆变换应用于数据中的单个记录(行),但不能应用于单个列。逆缩放器需要对具有变压器输出尺寸的对象进行操作。
| 归档时间: |
|
| 查看次数: |
1050 次 |
| 最近记录: |