Как определить, что переменные дерева калькулятора и калькулятор значений шапки являются категориальными?

Мне нужно лучше понять мою модель LightGBM, поэтому я использую объяснитель Shap Tree. LightGBM нуждается в кодировании данных, и я передаю те же данные в дерево объяснения. Поэтому я обеспокоен тем, что значения Shap Tree Explainer и Shap обрабатывают мои данные как числовые данные. Как указать, что данные являются категориальными? Изменяет ли это расчет значений Shap?

Я просмотрел документацию по ссылке - https://shap.readthedocs.io/en/latest/

0 ответов

shap не может обрабатывать особенности типа object. Просто убедитесь, что ваши непрерывные переменные имеют типfloat и ваши категориальные переменные типа category.


for cont in continuous_variables:
    df[cont] = df[cont].astype('float64')

for cat in categorical_variables:
    df[cat] = df[cat].astype('category')

и, наконец, вам также необходимо убедиться, что вы указали соответствующие значения в параметрах:

params = {
    'objective': "binary", 
    'num_leaves': 100, 
    'num_trees': 500, 
    'learning_rate': 0.1, 
    'tree_learner': 'data', 
    'device': 'cpu', 
    'seed': 132, 
    'max_depth': -1, 
    'min_data_in_leaf': 50, 
    'subsample': 0.9, 
    'feature_fraction': 1, 
    'metric': 'binary_logloss', 
    'categorical_feature': ['categoricalFeature1', 'categoricalFeature2']
}

bst = lgbm.Booster(model_file='model_file.txt')
tree_explainer = shap.TreeExplainer(bst)
tree_explainer.model.original_model.params = params

shap_values_result = tree_explainer.shap_values(df[features], y=df[target])

В качестве альтернативы вы можете применить кодирование меток к своим категориальным функциям. Например,

df['categoricalFeature'] = df['categoricalFeature'].astype('category')
df['categoricalFeature'] = df['categoricalFeature'].cat.codes

В качестве примечания убедитесь, что вы можете воспроизвести это сопоставление, чтобы таким же образом можно было преобразовать наборы данных для проверки / тестирования.

Другие вопросы по тегам