我正在学习如何使用 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 值的模型迭代生成预测。欣赏它!