XGBoost plot_importance не может отображать имена объектов - PullRequest
0 голосов
/ 07 июня 2018

Я использовал plot_importance, чтобы показать мне переменные важности.Но некоторые переменные являются категориальными, поэтому я сделал некоторые преобразования.После того, как я изменил тип переменных, когда я рисую важные объекты, на графике не отображаются названия объектов.Я приложил свой код и сюжет.набор данных = data.values ​​X = набор данных [1: 100,0: -2]

predictors=dataset[1:100,-1]

X = X.astype(str)
encoded_x = None
for i in range(0, X.shape[1]):
    label_encoder = LabelEncoder()
    feature = label_encoder.fit_transform(X[:,i])
    feature = feature.reshape(X.shape[0], 1)
    onehot_encoder = OneHotEncoder(sparse=False)
    feature = onehot_encoder.fit_transform(feature)
    if encoded_x is None:
        encoded_x = feature
    else:
        encoded_x = np.concatenate((encoded_x, feature), axis=1)
print("X shape: : ", encoded_x.shape)


response='Default'
#predictors=list(data.columns.values[:-1])



# Randomly split indexes
X_train, X_test, y_train, y_test = train_test_split(encoded_x,predictors,train_size=0.7, random_state=5)



model = XGBClassifier()
model.fit(X_train, y_train)


plot_importance(model)
plt.show()

[enter image description here][1]


  [1]: https://i.stack.imgur.com/M9qgY.png

1 Ответ

0 голосов
/ 07 июня 2018

Это ожидаемое поведение - sklearn.OneHotEncoder.transform() возвращает пустой массив 2d вместо ввода pd.DataFrame (я предполагаю, что это тип вашего dataset).Так что это не ошибка, а особенность.Не похоже, что в API-интерфейсе sklearn есть способ передать имена элементов вручную (их можно задать при создании xgb.Dmatrix в собственном API обучения).

Однако ваша проблема легкоразрешимо с pd.get_dummies() вместо комбинации LabelEncoder + OneHotEncoder, которую вы реализовали.Я не знаю, почему вы решили использовать его вместо этого (это может быть полезно, если вам нужно обработать также тестовый набор, но тогда вам нужно сыграть дополнительные трюки), но я бы посоветовал в пользу pd.get_dummies()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...