0

我运行了一个 lightgbm 的基本示例来测试 max_bin 如何影响模型:

require(lightgbm)
data(agaricus.train, package = "lightgbm")
data(agaricus.test, package = "lightgbm")
train <- agaricus.train
test <- agaricus.test

dtrain <- lgb.Dataset(data = train$data, label = train$label, free_raw_data = FALSE)
dtest <- lgb.Dataset(data = test$data, label = test$label, free_raw_data = FALSE)

valids <- list(train = dtrain, test = dtest)

set.seed(100)
bst <- lgb.train(data = dtrain,
             num_leaves = 31,
             learning_rate = 0.05,
             nrounds = 20,
             valids = valids,
             nthread = 2,
             max_bin = 32,
             objective = "binary")

我尝试将 max_bin 设置为 32 和 255,这两个测试给出了相同的输出:

[LightGBM] [Info] Number of positive: 3140, number of negative: 3373
[LightGBM] [Info] Total Bins 128
[LightGBM] [Info] Number of data: 6513, number of used features: 107
[LightGBM] [Warning] No further splits with positive gain, best gain: -inf
[1]:    train's binary_logloss:0.644852 test's binary_logloss:0.644853 
 ......
[20]:   train's binary_logloss:0.204922 test's binary_logloss:0.204929 

为什么 max_bin 对模型的训练没有影响?

4

2 回答 2

0

分箱是一种在离散视图(直方图)中表示数据的技术。Lightgbm 使用基于直方图的算法在创建弱学习器的同时找到最佳分割点。因此,每个连续的数字特征(例如视频的观看次数)都应该被分成离散的 bin。 在此处输入图像描述

此外,在这个 GitHub 存储库中,您可以找到一些全面的实验,这些实验完全解释了更改 max_bin 对 CPU 和 GPU 的影响。 在此处输入图像描述

如果您将 max_bin 定义为 255,则意味着每个特征最多可以有 255 个唯一值。然后较小的 max_bin 会导致更快的速度,较大的值会提高准确性。

于 2021-05-08T12:21:18.280 回答
0

您需要max_binDataset创建过程中进行设置。创建时Dataset会计算附加统计信息。我不知道 R 的实现细节,但在 Python 中你将它传递为params={"max_bin":32}.

于 2021-03-09T22:56:08.210 回答