【问题标题】:How to inverse TargetEncoder post-training with XGB for Feature Importance?如何使用 XGB 反转 TargetEncoder 后训练以获得特征重要性?
【发布时间】:2021-12-26 10:43:52
【问题描述】:

我在数据集中的所有分类、名义特征上使用了 TargetEncoder。将 df 拆分为训练和测试后,我在数据集上拟合 XGB。

模型经过训练后,我希望绘制特征重要性,但是,这些特征以“编码”状态显示。如何反转特征,以便重要性图是可解释的?

import category_encoders as ce
encoder=ce.TargetEncoder(cols=X.select_dtypes(['object']).columns) 
encoder.fit_transform(X,y)

model = XGBClassifier(use_label_encoder=False)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y_closed)
model.fit(X_train, y_train)

%matplotlib inline
import matplotlib.pyplot as plt
N_FEATURES = 10
importances = model.feature_importances_
indices = np.argsort(importances)[-N_FEATURES:]

plt.title('Feature Importances')
plt.xlabel('Relative Importance')
plt.show()

【问题讨论】:

    标签: python machine-learning scikit-learn xgboost encoder


    【解决方案1】:

    documentation 中所述:您可以使用get_feature_names() 返回编码的列/功能名称,然后删除原始功能名称。

    另外,您是否需要对目标特征 (y) 进行编码?

    在下面的示例中,我假设您只需要对与 X_train 数据集中的“对象”数据类型对应的特征进行编码。

    最后,最好先将数据集拆分为训练和测试,然后在训练集上执行fit_transform,在测试集上只执行fit。这样可以防止泄漏。

    object_col = X_train.select_dtypes(['object']).columns
    encoder = ce.TargetEncoder(cols = object_col) 
    df_enc = encoder.fit_transform(X_train)
    df_enc.columns = encoder.get_feature_names()
    X_train.drop(object_col, axis = 1, inplace = True)
    df_final = pd.concat([X_train, df_enc], axis = 1)
    

    【讨论】:

      猜你喜欢
      • 2019-07-22
      • 2021-09-09
      • 1970-01-01
      • 2013-04-01
      • 2014-10-28
      • 2019-10-05
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多