简答
你的数据集行数很少,LightGBM的参数设置为默认值,在中型数据集上提供良好的性能。
设置以下参数,强制 LightGBM 适应提供的数据。
长答案
在训练之前,LightGBM 会对输入数据进行一些预处理。
例子:
这个预处理的结果是一个LightGBM Dataset对象,运行这个预处理被称为Dataset“构造”。 LightGBM 对这个 Dataset 对象执行增强,而不是像 numpy 数组或 pandas 数据帧这样的原始数据。
为了加快构建速度并防止训练期间过度拟合,LightGBM 提供了防止创建太小的直方图 bin (min_data_in_bin) 或生成与记录太少的叶节点匹配的拆分 (min_data_in_leaf) 的功能。
在小型数据集上进行训练可能需要将这些参数设置为非常低的值。
我使用 Python 3.8.12、lightgbm==3.3.2、numpy==1.2< @2.2 和 scikit-learn==1.0.2 创建了以下最小的、可重现的示例来演示此行为。
from lightgbm import LGBMRegressor
from sklearn.metrics import r2_score
from sklearn.datasets import make_regression
# 20-row input data
X, y = make_regression(
n_samples=20,
n_informative=5,
n_features=5,
random_state=708
)
# training produces 0 trees, and predicts mean(y)
reg = LGBMRegressor(
num_boost_round=20,
verbosity=0
)
reg.fit(X, y)
print(f"r2 (defaults): {r2_score(y, reg.predict(X))}")
# 0.000
# training fits and predicts well
reg = LGBMRegressor(
min_data_in_bin=1,
min_data_in_leaf=1,
num_boost_round=20,
verbosity=0
)
reg.fit(X, y)
print(f"r2 (small min_data): {r2_score(y, reg.predict(X))}")
# 0.985
如果您在原始帖子的代码中使用 LGBMRegressor(min_data_in_bin=1, min_data_in_leaf=1),您将看到更符合所提供数据的预测。
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容