Xgboost PySpark API中验证指标列与评估结果查看问题
如何查看XGBoost PySpark API的验证集评估结果
方法1:训练后在验证集上手动计算指标
你已经通过validationIndicatorCol='isVal'标记了验证数据,训练完成后可以单独过滤出验证集,用模型生成预测结果后,借助Spark的评估器计算指定指标:
from pyspark.sql.functions import col from pyspark.ml.evaluation import BinaryClassificationEvaluator # 过滤出验证集 val_df = sampled_df.filter(col("isVal") == 1) # 用训练好的Pipeline模型生成预测结果 predictions = pipelineModel.transform(val_df) # 初始化对应指标的评估器(匹配你设置的eval_metric='aucpr') evaluator = BinaryClassificationEvaluator( labelCol="label", rawPredictionCol="rawPrediction", metricName="areaUnderPR" # areaUnderPR对应aucpr指标 ) # 计算并打印验证集指标 aucpr_score = evaluator.evaluate(predictions) print(f"验证集AUC-PR: {aucpr_score}")
方法2:开启训练日志查看每轮评估结果
如果需要监控训练过程中每一轮的验证指标变化,可以在初始化XgboostClassifier时添加verbosity参数开启日志输出,训练时控制台会打印每一轮的验证集指标:
修改你的XGBoost初始化代码:
xgb = XgboostClassifier(featuresCol = "features", labelCol="label", num_workers = 40, random_state = 1, missing = None, objective = 'binary:logistic', validationIndicatorCol = 'isVal', eval_metric = 'aucpr' , n_estimators = best_n_estimators, max_depth = best_max_depth, learning_rate = best_learning_rate, verbosity=1 # 开启日志,显示每轮验证指标 )
训练时日志会输出类似如下内容,包含每一轮的验证集AUC-PR结果:
[1] validation-aucpr: 0.8234 [2] validation-aucpr: 0.8456 ... [n] validation-aucpr: 0.8789
补充说明
XGBoost PySpark实验性API基于分布式实现,和原生XGBoost接口存在差异,目前确实未暴露evals_result()方法,文档未明确说明但属于实际实现限制,上述两种方法可替代获取评估结果。
内容的提问来源于stack exchange,提问作者Vusal
相关产品推荐
相关产品推荐

