Python简答您的数据集的行数非常少

简答

你的数据集行数很少,LightGBM的参数设置为默认值,在中型数据集上提供良好的性能。

设置以下参数,强制 LightGBM 适应提供的数据。

长答案

在训练之前,LightGBM 会对输入数据进行一些预处理。

例子:

这个预处理的结果是一个LightGBM Dataset对象,运行这个预处理被称为Dataset“构造”。 LightGBM 对这个 Dataset 对象执行增强,而不是像 numpy 数组或 pandas 数据帧这样的原始数据。

图片[1]-Python简答您的数据集的行数非常少-唐朝资源网

为了加快构建速度并防止训练期间过度拟合,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),您将看到更符合所提供数据的预测。

© 版权声明
THE END
喜欢就支持一下吧
点赞117赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容