You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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)

代码说明

  1. 拆解嵌套字典:results的结构是外层键为数据集名称(train/test),内层键为指标名称(rmse/R2),对应的值是每轮迭代的指标列表。我们通过两层循环把这些数据提取出来。
  2. 处理元组类型指标值:部分自定义指标(或XGBoost内置的部分指标)会返回元组(比如包含指标值和是否需要最大化的标记),这时候我们只取元组的第一个元素作为指标值。
  3. 调整列顺序:如果需要严格匹配示例中的列顺序,可以通过指定列名列表重新排列DataFrame的列。

内容的提问来源于stack exchange,提问作者MachineLeon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:31:31