如何将xgboost.train()的evals_result转换为Pandas DataFrame
将XGBoost训练结果字典转换为指定格式的Pandas DataFrame
要把xgb.train()返回的results字典转换成目标格式的DataFrame,核心是拆解嵌套字典的结构,把每个<数据集-指标>组合映射为DataFrame的一列,具体实现如下:
核心代码实现
import pandas as pd # 初始化空DataFrame df_results = pd.DataFrame() # 遍历results中的数据集(如train、test) for dataset, metrics_dict in results.items(): # 遍历当前数据集下的所有指标(如rmse、R2) for metric, values in metrics_dict.items(): # 构造列名,格式为「数据集-指标」 col_name = f"{dataset}-{metric}" # 处理指标值为元组的情况(部分自定义指标可能返回(指标值, 辅助信息)) if isinstance(values[0], tuple): df_results[col_name] = [val[0] for val in values] else: df_results[col_name] = values # 可选:按照你示例中的顺序调整列的排列 target_cols = ["train-rmse", "test-rmse", "train-R2", "test-R2"] df_results = df_results[target_cols] # 查看转换后的结果 print(df_results)
代码说明
- 拆解嵌套字典:
results的结构是外层键为数据集名称(train/test),内层键为指标名称(rmse/R2),对应的值是每轮迭代的指标列表。我们通过两层循环把这些数据提取出来。 - 处理元组类型指标值:部分自定义指标(或XGBoost内置的部分指标)会返回元组(比如包含指标值和是否需要最大化的标记),这时候我们只取元组的第一个元素作为指标值。
- 调整列顺序:如果需要严格匹配示例中的列顺序,可以通过指定列名列表重新排列DataFrame的列。
内容的提问来源于stack exchange,提问作者MachineLeon
相关产品推荐
相关产品推荐

