我运行了一个基本的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对模型的训练没有影响?
发布于 2021-03-10 06:56:08
您需要在创建Dataset时设置max_bin。创建Dataset时,将计算额外的统计信息。我不知道R实现的细节,但在Python语言中,您可以将它作为params={"max_bin":32}传递。
发布于 2021-05-08 20:21:18
入库是一种在离散视图(直方图)中表示数据的技术。Lightgbm使用基于直方图的算法来找到最佳分割点,同时创建一个弱学习器。因此,每个连续的数字特征(例如,视频的观看次数)应该被分成离散的存储箱。

此外,在这个GitHub库中,您可以找到一些全面的实验,它们完全解释了更改max_bin对CPU和GPU的影响。

如果您定义了max_bin 255,这意味着我们每个特性最多可以有255个唯一值。然后,较小的max_bin会导致更快的速度,而较大的值会提高准确性。
https://stackoverflow.com/questions/49247533
复制相似问题