Как получить имена классов в листовом узле графика XGBClassifier и использовать потерю кросс-энтропии с некоторыми общими сомнениями относительно XGboost - PullRequest
0 голосов
/ 19 июня 2020

Я использую 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()

Ниже приведены мои сомнения:

  1. Когда я строю дерево, я получаю некоторые числа в листовом узле, но на самом деле у меня есть такие классы, как High, Medium and Low . Как получить имена классов?
  2. Как я могу использовать потерю кросс-энтропии внутри GridSearchCV, как я использовал objective':['multi:softmax']. Как это сделать?
  3. Я получаю эту строку, напечатанную при запуске указанной выше модели: 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.
  4. Я хочу использовать эту строку # skf = StratifiedKFold(n_splits=folds, shuffle = True, random_state = 1001) внутри GridSearchCV. Как это сделать?
...