gpt4 book ai didi

在 LightGBM 中使用 eval() 评估测试数据集

转载 作者:行者123 更新时间:2023-12-03 17:30:39 29 4
gpt4 key购买 nike

我用 LightGBM 训练了一个排名模型,目标是“lambdarank”。
我想评估我的模型以使用最佳迭代为我的测试数据集获得 nDCG 分数,但我一直无法使用 lightgbm.Booster.eval() 或 lightgbm.Booster.eval_train() 函数。

首先,我创建了 3 个数据集实例,分别是训练集、有效集和测试集:

lgb_train = lgb.Dataset(x_train, y_train, group=query_train, free_raw_data=False)

lgb_valid = lgb.Dataset(x_valid, y_valid, reference=lgb_train, group=query_valid, free_raw_data=False)

lgb_test = lgb.Dataset(x_test, y_test, group=query_test)

然后我使用 lgb_train 和 lgb_valid 训练我的模型:
gbm = lgb.train(params,
lgb_train,
num_boost_round=1500,
categorical_feature=chosen_cate_features,
valid_sets=[lgb_train, lgb_valid],
evals_result=evals_result,
early_stopping_rounds=150
)

当我在训练后调用 eval() 或 eval_train() 函数时,它返回一个错误:
gbm.eval(data=lgb_test,name='test')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-122-7ff5ef5136b8> in <module>()
----> 1 gbm.eval(data=lgb_test,name='test')

/usr/local/lib/python3.6/dist-packages/lightgbm/basic.py in eval(self, data,
name, feval)
1925 raise TypeError("Can only eval for Dataset instance")
1926 data_idx = -1
-> 1927 if data is self.train_set:
1928 data_idx = 0
1929 else:

AttributeError: 'Booster' object has no attribute 'train_set'
gbm.eval_train()
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-123-0ce5fa3139f5> in <module>()
----> 1 gbm.eval_train()

/usr/local/lib/python3.6/dist-packages/lightgbm/basic.py in eval_train(self,
feval)
1956 List with evaluation results.
1957 """
-> 1958 return self.__inner_eval(self.__train_data_name, 0, feval)
1959
1960 def eval_valid(self, feval=None):

/usr/local/lib/python3.6/dist-packages/lightgbm/basic.py in
__inner_eval(self, data_name, data_idx, feval)
2352 """Evaluate training or validation data."""
2353 if data_idx >= self.__num_dataset:
-> 2354 raise ValueError("Data_idx should be smaller than number
of dataset")
2355 self.__get_eval_info()
2356 ret = []

ValueError: Data_idx should be smaller than number of dataset

当我调用 eval_valid() 函数时,它返回一个空列表。

谁能告诉我如何评估 LightGBM 模型并正确使用测试集获得 nDCG 分数?谢谢。

最佳答案

如果您添加 keep_training_booster=True作为您的 lgb.train 的论据,返回 booster对象将能够执行 evaleval_train (尽管 eval_valid 出于某种原因仍会返回一个空列表,即使 valid_setslgb.train 中提供)。
Documentation说:

keep_training_booster (bool, optional (default=False)) – Whether the returned Booster will be used to keep training. If False, the returned value will be converted into _InnerPredictor before returning.

关于在 LightGBM 中使用 eval() 评估测试数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54859058/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com