0

我正在学习如何使用 XGBClassifier 生成预测,我发现 xgboost.train 是 XGBClassifier 在后台调用的。我想第一个问题是:是否有任何理由偏爱一种方式而不是另一种方式,或者它们根本不等同?

我设置了这段代码,在第 12 次迭代中给了我最好的模型:

m1 = xgb.XGBClassifier(max_depth = 5,
                       n_estimators = 20,
                       objective = 'binary:logistic',
                       use_label_encoder = False,
                       eval_metric = 'auc',
                       random_state = 1234)

m1.fit(x_train, y_train,
       eval_set = [(x_test, y_test)],
       eval_metric = 'auc',
       early_stopping_rounds = 5)

pred1 = m1.predict_proba(x_test)[:,1]
roc_auc_score(y_test, pred1)

我还没有调整参数,因为我只是想确保代码运行。然后我设置了下面的代码,希望得到与上面相同的行为:

train_params = {'objective': 'binary:logistic',
                'max_depth': 5,
                'eval_metric':'auc',
                'random_state':1234}

mat_train = xgb.DMatrix(data = x_train, label = y_train)
mat_test = xgb.DMatrix(data = x_test, label = y_test)

evals_result = {}
m2 = xgb.train(params = train_params,
               dtrain = mat_train,
               num_boost_round = 20,
               early_stopping_rounds = 5,
               evals = [(mat_test, 'eval')],
               evals_result = evals_result)

pred2 = m2.predict(mat_test)
roc_auc_score(y_test, pred2)

这也会在第 12 次迭代中返回相同的最佳模型,但预测结果与 XGBClassifier 方法不同,因为 pred2 实际上使用了第 17 次迭代。我翻阅了文档,发现了关于early_stopping_rounds参数的内容:

该方法返回上一次迭代的模型(不是最好的)。如果需要最佳模型,请使用自定义回调或模型切片。

我一直没能找到很多关于这个主题的资源,所以我在这里寻求一些帮助,以便我可以使用具有最高 AUC 值的模型迭代生成预测。欣赏它!

4

0 回答 0