在训练的时候很多人想查看训练集和验证集的训练情况,但不知道如何打印出来或者形成图
现在我教教大家,查看了xgboost 的api 确实有一个eval_metric参数可以输出训练情况
1.首先在params中设定eval_metric,记住这个属性和lightgbm不一样lightgbm是用metric={“logloss,"auc”}这种map形式,xgboost是应用list形式的,eval_metric=["auc",“rmse”,"logloss"]
2.应用xgboost.train进行训练的话,应用evals进行评估操作。
#测试集的训练数据
其中data的数据是从pd.read_csv读取的
y_train =data.label #label标签自定义
x_train=data.drop(labels="label",axis=1)
train_x, valid_x, train_y, valid_y = train_test_split(x_train, y_train, test_size=0.2) # 分训练集和验证集dtrain = xgb.DMatrix(train_x, label=train_y)
dtest = xgb.DMatrix(valid_x,label=valid_y)
model = xgb.train(params, xgb.DMatrix(train_x,train_y),evals=[(dtrain,'train'),(dtest,'vaild')],num_boost_round=500)
3.训练结果如下
4.如果你是应用fit进行训练的话,参数就不一样了,如下
model1=XGBClassifier(**params)
train = [train_x, train_y]
eval = [x_test, y_test1]
model2=model1.fit(train_x,train_y,eval_metric=['logloss','auc','error'],eval_set=[train,eval])
5.打印显示训练时的变化情况(必须用fit的方法训练才能查看到)自己现在的理解
plot_logloss(model2)
# 画出损失函数的变化情况
def plot_logloss(model):
results = model.evals_result_
print(results)
epochs = len(results['validation_0']['logloss'])
x_axis = range(0, epochs)
print(epochs)
# plot log loss
fig, ax = plt.subplots()
ax.plot(x_axis, results['validation_0']['logloss'], label='Train')
print(results['validation_1']['logloss'])
ax.plot(x_axis, results['validation_1']['logloss'], label='Test')
ax.legend()
plt.ylabel('Log Loss')
plt.title('XGDboost Log Loss')
plt.show()
# plot classification error
fig, ax = plt.subplots()
ax.plot(x_axis, results['validation_0']['error'], label='Train')
ax.plot(x_axis, results['validation_1']['error'], label='Test')
ax.legend()
plt.ylabel('Classification Error')
plt.title('XGBoostClassification Error')
plt.show()