您可以在 LightGBM.train() 中获取每个 boosting 轮的分数吗?

Mar*_*son 4 python lightgbm

基本信息

lgbm.train(early_stopping计算每轮提升后的目标函数和feval分数,我们可以让它在每轮打印这些verbose_eval,如下所示:

bst=lgbm.train(**params)
[10]    valid_0's binary_logloss: 0.215654  valid_0's BinaryError: 0.00775126
[20]    valid_0's binary_logloss: 0.303113  valid_0's BinaryError: 0.00790619
[30]    valid_0's binary_logloss: 0.358056  valid_0's BinaryError: 0.0838744
[40]    valid_0's binary_logloss: 0.386763  valid_0's BinaryError: 0.138462
[50]    valid_0's binary_logloss: 0.411467  valid_0's BinaryError: 0.176986
Run Code Online (Sandbox Code Playgroud)

问题:

有什么方法可以访问每个助推轮的这些分数列表吗?

我在文档中能找到的最接近的东西bst.__dict__bst.best_score

defaultdict(collections.OrderedDict,
             {'valid_0': OrderedDict([('binary_logloss', 0.4233895131745753),
                           ('BinaryError', 0.194285077972568)])})
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以按如下方式使用evals_result参数;

\n\n
evals_result = {}\n\nbst=lgbm.train(evals_result=evals_result, valid_sets = [valid_set, train_set],\n               valid_names = [\xe2\x80\x98valid\xe2\x80\x99, \xe2\x80\x98train\xe2\x80\x99], **params)\n\nevals_result\n>>> {\xe2\x80\x98train\xe2\x80\x99: {\xe2\x80\x98logloss\xe2\x80\x99: [\xe2\x80\x980.36483\xe2\x80\x99, \xe2\x80\x980.32617\xe2\x80\x99, \xe2\x80\xa6]}, \xe2\x80\x98valid\xe2\x80\x99: {\xe2\x80\x98logloss\xe2\x80\x99: [\xe2\x80\x980.479168\xe2\x80\x99, \xe2\x80\x980.317850\xe2\x80\x99, \xe2\x80\xa6]}}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您将拥有一本包含每个提升轮的训练分数和有效设定分数的字典。

\n