【问题标题】:Getting a Pandas Dataframe result file from native xgboost.train()从原生 xgboost.train() 获取 Pandas Dataframe 结果文件
【发布时间】:2023-01-17 22:12:01
【问题描述】:

可以使用参数 evals_resultxgboost.train() 获取结果文件,如下所示:

import xgboost as xgb
import sklearn as sk


def metric_r2(predt: np.ndarray, dtrain: xgb.DMatrix) -> Tuple[str, float]:
    """ compute R^2` (coefficient of determination) regression score function"""
    y = dtrain.get_label()
    return "R2", sk.metrics.r2_score(y, predt)


results: Dict[str, Dict[str, Union[List[float], List[Tuple[float, float]]]]] = {}
xgb_model: xgb.Booster = xgb.train(
    params, d_train, num_boost_round=100,
    evals=[(d_train, "train"), (d_test, "test")], verbose_eval=True, custom_metric=metric_r2,
    evals_result=results
)

如何将此文件转换为以下 pandas Dataframe:

   train-rmse  test-rmse  train-R2 test-R2
0     0.48253   0.480385      0.73    0.72
1     0.35953   0.357756      0.76    0.74

【问题讨论】:

    标签: python xgboost


    【解决方案1】:

    我尝试了以下并且有效:

    import xgboost as xgb
    import pandas as pd
    import sklearn as sk
    
    
    def metric_r2(predt: np.ndarray, dtrain: xgb.DMatrix) -> Tuple[str, float]:
        """ compute R^2` (coefficient of determination) regression score function"""
        y = dtrain.get_label()
        return "R2", sk.metrics.r2_score(y, predt)
    
    def convert_results_to_pandas(results: Dict[str, Dict[str, Union[List[float], List[Tuple[float, float]]]]]) -> pd.DataFrame:
        """Converts a given results dictionary into a pandas dataframe."""
        df: pd.DataFrame = pd.DataFrame()
        for dataset_name, values1 in results.items():
            for metric_name, values2 in values1.items():
                column_name = dataset_name + "-" + metric_name
                df[column_name] = values2
        return df
    
    
    xgb_model: xgb.Booster = xgb.train(
        params, self.d_train, num_boost_round=self.number_of_boosting_rounds,
        evals=[(self.d_train, "train"), (self.d_test, "test")], verbose_eval=True, custom_metric=metric_r2,
        evals_result=results
    )
    pd_results: pd.DataFrame = convert_results_to_pandas(results)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-05
      • 2021-12-14
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      相关资源
      最近更新 更多