这个评估模型函数经常使用,我发现它在IBM使用here。但我会在这里显示功能:
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
考虑到测试集比培训集具有更高的准确性,我想知道这两个模型报告是否完全相关。如果这个问题的结构不好,我深表歉意。
答案 0 :(得分:1)
我将进一步回答我的问题:
此函数训练您提供的数据集,并返回训练精度和AUC:因此,这不是评估模型的可靠方法。
在您提供的链接中,据说该函数用于调整估计量:
下面的功能执行以下操作以找到最佳的 可用于数据的增强树数量:
- 使用数据特征训练XGBoost模型。
- 使用准确性和AUC得分作为评估指标,对模型执行k倍交叉验证。
- 在每个提升回合中返回输出,因此您可以查看模型的学习方式。您将在下一个中查看详细的输出
部分。- 在交叉验证得分没有明显提高(通过额外的回合回合)后,它将停止运行,为您提供 模型的最佳估计量。
您不应使用它来评估模型性能,而应执行干净的交叉验证。
在这种情况下,您的测试分数较高,因为您的测试集较小,因此模型更容易过拟合。