Я пытаюсь использовать Shapley summary_plot для проверки первых двадцати функций в моем классификаторе случайного леса. Сначала я предварительно обработал свои данные с помощью MaxAbsScaler и OneHotEncoder, используя make_pipeline и ColumnTransformer. Когда я рисую значения Шепли, я вижу, что все имена функций являются числами, и я не могу понять, как правильно идентифицировать имена функций. Я сослался на: Конвейер Sklearn: получение имен функций после OneHotEncode в ColumnTransformer, но я вижу сообщение об ошибке ниже.
Сначала я пробую сюжет Шепли:
explainer = shap.TreeExplainer(rf)
shap_values = explainer.shap_values(X_test_scaled)
#convert X_test_scaled to DF so can call column names
X_test_scaled = pd.DataFrame(X_test_scaled)
X_test_scaled.head()
shap.summary_plot(shap_values, features=X_test_scaled, feature_names = X_test_scaled.columns)
производит: Сводный график Шепли с пронумерованными элементами
Затем, чтобы получить имена, я попытался из сообщения:
preprocess['maxabsscaler'].transformers_[1][1]['onehotencoder']\
.get_feature_names(categorical_features)
который выводит:
TypeError Traceback (последний вызов последним) в 2 # .get_feature_names (категориальные_функции 3 ---- ›4 препроцессора ['maxabsscaler']. Transformers_ 1 ['onehotencoder']
5 .get_feature_names (категориальные_функции)
TypeError: объект ColumnTransformer не подлежит подписке
MaxAbsScaler
не должен изменять количество функций, ноOneHotEncoder
представит новую функцию для каждого уникального значения в столбце: у вас есть способ назвать их? (например,blood_pressure_category_1
,blood_pressure_category2
и т. д.) - person Alexander L. Hayes   schedule 22.04.2021