前文回顾:
在Python中开始使用 XGBoost的7步迷你课程
第 01 课:梯度提升简介
第 02 课:XGBoost 简介
第 03 课:开发您的第一个 XGBoost 模型
XGBoost 模型可以在训练期间评估和报告模型的测试集上的表现。 它通过在训练模型和指定详细输出(verbose=True)时调用 **model.fit()**时指定测试数据集和评估指标来支持此功能。 例如,我们可以在训练XGBoost模型时报告独立测试集(eval_set )上的二进制分类错误率(错误),如下所示:
eval_set = [(X_test, y_test)]
model.fit(X_train, y_train, eval_metric="error", eval_set=eval_set, verbose=True)
使用此配置运行模型将在添加每个树后报告模型的表现。例如:
...
[89] validation_0-error:0.204724
[90] validation_0-error:0.208661
一旦没有对模型进行进一步改进,我们就可以使用此评估来停止训练。 我们可以通过在调用**model.fit()**时将early_stopping_rounds 参数设置为在停止训练之前验证数据集未见改进的迭代次数来完成此操作。 下面提供了使用 Pima Indians Onset of Diabetes 数据集的完整示例。
# exmaple of early stopping
from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# load data
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
# split data into X and y
X = dataset[:,0:8]
Y = dataset[:,8]
# split data into train and test sets
seed = 7
test_size = 0.33
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# fit model on training data
model = XGBClassifier()
eval_set = [(X_test, y_test)]
model.fit(X_train, y_train, early_stopping_rounds=10, eval_metric="logloss", eval_set=eval_set, verbose=True)
# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))
在下一课中,我们将研究如何使用 XGBoost 计算特征的重要性。