Алгоритм XGBoost, вопрос о функции evaulate_model - PullRequest
0 голосов
/ 06 февраля 2019

Эта функция модели моделирования часто используется, я обнаружил, что она использовала здесь в IBM.Но я покажу функцию здесь:

def evaluate_model(alg, train, target, predictors, useTrainCV=True , cv_folds=5, early_stopping_rounds=50):

    if useTrainCV:
        xgb_param = alg.get_xgb_params()
        xgtrain = xgb.DMatrix(train[predictors].values, target['Default Flag'].values)
        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,
            metrics='auc', early_stopping_rounds=early_stopping_rounds, verbose_eval=True)
        alg.set_params(n_estimators=cvresult.shape[0])

    #Fit the algorithm on the data
    alg.fit(train[predictors], target['Default Flag'], eval_metric='auc')

    #Predict training set:
    dtrain_predictions = alg.predict(train[predictors])
    dtrain_predprob = alg.predict_proba(train[predictors])[:,1]

    #Print model report:
    print("\nModel Report")
    print("Accuracy : %.6g" % metrics.accuracy_score(target['Default Flag'].values, dtrain_predictions))
    print("AUC Score (Train): %f" % metrics.roc_auc_score(target['Default Flag'], dtrain_predprob))  
    plt.figure(figsize=(12,12))
    feat_imp = pd.Series(alg.get_booster().get_fscore()).sort_values(ascending=False)
    feat_imp.plot(kind='bar', title='Feature Importance', color='g')
    plt.ylabel('Feature Importance Score')
    plt.show()

После настройки параметров для XGboost у меня будет

xgb4 = XGBClassifier(
    objective="binary:logistic", 
    learning_rate=0.10,  
    n_esimators=5000,
    max_depth=6,
    min_child_weight=1,
    gamma=0.1,
    subsample=0.8,
    colsample_bytree=0.8,
    reg_alpha=0.1,
    nthread=4,
    scale_pos_weight=1.0,
    seed=27)
features = [x for x in X_train.columns if x not in ['Default Flag','ID']]
evaluate_model(xgb4, X_train, y_train, features)

, и я получу результаты

Model Report
Accuracy : 0.803236
AUC Score (Train): 0.856995

Вопрос, который у меня возник и, возможно, плохо проинформирован, заключается в том, что эта функция evaulate_model() не проверяется на тестовом наборе данных, которые я нахожу странными.Когда я вызываю его на тестовом наборе (evaluate_model(xgb4, X_test, y_test, features)), я получаю это

Model Report
Accuracy : 0.873706
AUC Score (Train): 0.965286

Я хочу знать, относятся ли эти два модельных отчета вообще, учитывая, что тестовый набор имеет более высокую точность, чемОбучающий набор.Приношу свои извинения, если структура этого вопроса плохо представлена.

1 Ответ

0 голосов
/ 07 февраля 2019

Я разработаю свой ответ немного подробнее:

Эта функция обучает набор данных, который вы ей предоставляете, и возвращает точность поезда и AUC: поэтому это не надежный способ оценки ваших моделей.

В предоставленной вами ссылке сказано, что эта функция используется для настройки количества оценщиков:

Приведенная ниже функция выполняет следующие действия, чтобы найти наилучшее количество деревьев повышениядля использования с вашими данными:

  • Обучает модель XGBoost, используя особенности данных.
  • Выполняет перекрестную проверку в k-кратном выражении для модели, используя точность и оценку AUC в качестве метрики оценки.
  • Возвращает выходные данные для каждого раунда повышения, чтобы вы могли видеть, как обучается модель.Вы увидите подробный вывод в следующем разделе
    .
  • Он останавливается после того, как показатель перекрестной проверки значительно не улучшается с дополнительными раундами повышения, что дает вам
    оптимальное количество оценок длямодель.

Вам не следует использовать ее для оценки производительности вашей модели, а вместо этого выполнить чистую перекрестную проверку.

В этом случае ваши оценки по тестам выше, посколькуИспытательный набор меньше, поэтому модель удобнее носить.

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