Python Xgboost使用Xvars自定义评估函数

Python Xgboost使用Xvars自定义评估函数,python,machine-learning,xgboost,Python,Machine Learning,Xgboost,我想构建一个xgb可以使用的自定义评估函数。它本质上是跨多个组的加权平均函数。根据xgboost的文档,一个示例自定义评估调用有点像这样: def custom_loss(yhat, dtrain): y = dtrain.get_label() return 'mae', mean_absolute_error(np.exp(y)-shift, np.exp(yhat)-shift) 我想要传递的是我的数据帧

我想构建一个xgb可以使用的自定义评估函数。它本质上是跨多个组的加权平均函数。根据xgboost的文档,一个示例自定义评估调用有点像这样:

def custom_loss(yhat, dtrain):
    y = dtrain.get_label()
    return 'mae', mean_absolute_error(np.exp(y)-shift,
                                  np.exp(yhat)-shift)
我想要传递的是我的数据帧。因此,函数调用可能类似于:

def custom_loss(yhat, dtrain, X):
    y = dtrain.get_label()
    # Do some groupby with X and so on....
    # Get wrmse here 
    return 'wrmse', wrmse 
其中X可以是我的列车/评估数据帧。有人能告诉我是否有办法做到这一点吗


我的第二点是,即使我能够通过这个“X”(train/eval数据帧),它会是一个DMatrix对象吗?如果是,是否有方法从中提取列

我认为函数不关心它的参数。只需执行此操作并返回字符串和值。如果出现问题,显示错误,我们将从那里开始处理。@Eramoshe-Hmm,因此错误是:TypeError:'DMatrix'对象不可下标。这是因为我试图访问DMatrix对象的列,就像访问pandas dataframe一样