Как отобразить оригинальные названия элементов на графике важности элементов? - PullRequest
0 голосов
/ 27 июня 2018

Я создал модель XGBoost следующим образом:

y = XY.DELAY_MIN
X = standardized_df

train_X, test_X, train_y, test_y = train_test_split(X.as_matrix(), y.as_matrix(), test_size=0.25)

my_imputer = preprocessing.Imputer()
train_X = my_imputer.fit_transform(train_X)
test_X = my_imputer.transform(test_X)

xgb_model = XGBRegressor()

# Add silent=True to avoid printing out updates with each cycle
xgb_model = XGBRegressor(n_estimators=1000, learning_rate=0.05)
xgb_model.fit(train_X, train_y, early_stopping_rounds=5, 
             eval_set=[(test_X, test_y)], verbose=False)

Когда я создаю график важности объекта, имена объектов отображаются в виде «f1», «f2» и т. Д. Как я могу показать оригинальные названия объектов?

fig, ax = plt.subplots(figsize=(12,18))
xgb.plot_importance(xgb_model, max_num_features=30, height=0.8, ax=ax)
plt.show()

1 Ответ

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

Проблема в том, что Imputer не возвращает pd.DataFrame как вывод transform(), таким образом, ваши имена столбцов теряются, когда вы делаете

train_X = my_imputer.fit_transform(train_X)
test_X = my_imputer.transform(test_X)

Простое решение, оберните вывод импутера в кадр данных, например, так:

train_X = pd.DataFrame(my_imputer.fit_transform(train_X), columns=train_X.columns)
test_X  = pd.DataFrame(my_imputer.transform(test_X), columns=test_X.columns)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...