Я использую GridSearchCV
и XGBClassifier
для построения модели классификации с 3 классами. Вот код:
X_train = pd.get_dummies(X_train)
params = {
'min_child_weight': [1, 5, 10],
'gamma': [0.5, 1, 1.5, 2, 5],
'subsample': [0.6, 0.8, 1.0],
'colsample_bytree': [0.6, 0.8, 1.0],
'max_depth': [3, 4, 5],
'objective':['multi:softmax'],
'num_class': [3]
}
xgb = XGBClassifier(learning_rate=0.02, n_estimators=600,silent=True, nthread=1)
# skf = StratifiedKFold(n_splits=folds, shuffle = True, random_state = 1001)
grid = GridSearchCV(estimator=xgb, param_grid=params, scoring='accuracy', n_jobs=4, verbose=3)
model=grid.fit(X_train, y_train)
from xgboost import XGBClassifier, plot_tree
fig, ax = plt.subplots(figsize=(80, 80))
plot_tree(model.best_estimator_, num_trees=1,ax=ax)
plt.show()
Ниже приведены мои сомнения:
- Когда я строю дерево, я получаю некоторые числа в листовом узле, но на самом деле у меня есть такие классы, как
High, Medium and Low
. Как получить имена классов? - Как я могу использовать потерю кросс-энтропии внутри
GridSearchCV
, как я использовал objective':['multi:softmax']
. Как это сделать? - Я получаю эту строку, напечатанную при запуске указанной выше модели:
This may not be accurate due to some parameters are only used in language bindings but
passed down to XGBoost core. Or some parameters are not used but slip through this
verification. Please open an issue if you find above cases.
- Я хочу использовать эту строку
# skf = StratifiedKFold(n_splits=folds, shuffle = True, random_state = 1001)
внутри GridSearchCV
. Как это сделать?