ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

LightGBM 如何用 forcedbins_filename 固定特征分箱边界

LightGBM 如何用 forcedbins_filename 固定特征分箱边界 LightGBM 如何用 forcedbins_filename 固定特征分箱边界【免费下载链接】LightGBMA fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.项目地址: https://gitcode.com/GitHub_Trending/li/LightGBMLightGBM 默认根据训练数据自动决定每个数值特征的分箱边界边界由max_bin控制。当业务上需要某些特征在固定阈值处切分例如保证训练集与预测集使用同一套分箱边界、或让模型决策边界落在指定取值附近时可以使用forcedbins_filename参数它接收一个.json文件的路径为部分或全部数值特征指定固定的分箱上界。参数说明见 Parameters.rst官方示例文件为 examples/regression/forced_bins.json。Parameters.rst中对forcedbins_filename的完整说明默认值为类型为 string指向一个.json文件用于指定部分或全部特征的分箱上界bin upper bounds.json文件应包含一个对象数组每个对象含有feature整数特征索引和bin_upper_bound分箱阈值数组两个字段。准备分箱边界 JSON 文件文件内容是一个数组每个元素对应一个特征。以仓库自带的 examples/regression/forced_bins.json 为例[ { feature: 0, bin_upper_bound: [ 0.3, 0.35, 0.4 ] }, { feature: 1, bin_upper_bound: [ -0.1, -0.15, -0.2 ] } ]这份文件为特征 0 和特征 1 固定了分箱边界examples/regression/forced_bins2.json 则只为特征 0 提供了 4 个边界0.19, 0.39, 0.59, 0.79。两个使用前提均来自源码中的处理逻辑dataset_loader.cpp与测试用例feature是整数特征索引。Parameters.rst中categorical_feature一节说明索引从0开始且传入类型为int时不计入标签列未在 JSON 中列出的特征仍按自动分箱处理即该参数只影响指定特征。在 CLI 训练配置中启用回归示例的 train.conf 中已预留了这一参数的注释行取消注释并指定文件即可# forced bin thresholds forcedbins_filename forced_bins.json示例目录的运行方式见 examples/regression/README.md前提是已按安装指南构建出lightgbm可执行文件# 在 examples/regression 目录下运行 ../../lightgbm configtrain.conf需要留意的是GetForcedBins读取该文件时如果路径打不开只输出一条Could not open ... Will ignore.的警告训练照常进行即文件写错路径不会报错、参数会被静默忽略。因此配置后应确认日志中没有这条警告。在 Python API 中使用forcedbins_filename是 Dataset 构造参数在创建lgb.Dataset时传入而不是训练参数。仓库测试用例test_forced_binstest_engine.py展示了典型用法import lightgbm as lgb import numpy as np x np.empty((100, 2)) x[:, 0] np.arange(0, 1, 0.01) x[:, 1] -np.arange(0, 1, 0.01) y np.arange(0, 1, 0.01) params { objective: regression_l1, max_bin: 5, forcedbins_filename: examples/regression/forced_bins.json, num_leaves: 2, min_data_in_leaf: 1, verbose: -1, } lgb_x lgb.Dataset(x, labely) est lgb.train(params, lgb_x, num_boost_round20)注意forced_bins.json的路径应替换为你自己准备的文件路径。测试用例中的原始值指向仓库内examples/regression/forced_bins.json这里改写为相对仓库根目录的路径需保证运行时该路径可解析。验证固定分箱是否生效LightGBM 训练完成后不会在日志中直接输出各特征的分箱边界文档中给出的可操作验证方式是检查落在同一固定区间内的不同取值预测结果是否按分箱区分开。测试用例test_forced_bins的验证逻辑如下new_x np.zeros((3, x.shape[1])) new_x[:, 0] [0.31, 0.37, 0.41] # 三个值分别落在 0.3 / 0.35 / 0.4 边界划出的不同区间 predicted est.predict(new_x) assert len(np.unique(predicted)) 3 new_x[:, 0] [0, 0, 0] new_x[:, 1] [-0.9, -0.6, -0.3] # 三个值落在特征 1 的同一个固定区间内 predicted est.predict(new_x) assert len(np.unique(predicted)) 1文档示例中的判断标准取值跨过固定边界时预测值出现区分上例中 3 个值得到 3 个不同预测取值落在同一个固定区间内时预测值一致上例中 3 个值得到 1 个相同预测。对照实验将params[forcedbins_filename]置为重新训练同样输入下预测不再按上述固定区间对齐——测试用例断言此时 3 个值得到 3 个不同预测。这个开/关参数各训练一次再对比的对照是文档给出的确认固定分箱生效的方式。使用限制分位数型特征的边界会被忽略。GetForcedBins中若 JSON 里的feature被声明为 categorical会输出警告Feature %d is categorical. Will ignore forced bins for this feature.该特征的固定边界不生效。重复边界自动去除。同一特征的bin_upper_bound中的重复值会被去重不会形成空区间。Python 中参数只能在构造 Dataset 时确定。测试用例test_unchangeable_params表明Dataset 构造完成后修改forcedbins_filename会抛出LightGBMError错误信息形如Cannot change forced bins ...。与max_bin的关系以测试断言为准。test_forced_bins的第三段只对 1 列特征使用 forced_bins2.json4 个固定边界、max_bin设为 11、训练 50 轮后对各预测值计数断言min(counts) 9、max(counts) 11。可见固定边界与max_bin共同作用在该特征的最终分箱上文档未单独说明两者的合并规则如需精确控制请按该测试的断言口径验证。以上路径与参数均以当前仓库文档为准CLI 与 Python 两条路径使用同一个forcedbins_filename参数JSON 文件格式相同可按实际训练入口任选其一。【免费下载链接】LightGBMA fast, distributed, high performance gradient boosting (GBT, GBDT, GBRT, GBM or MART) framework based on decision tree algorithms, used for ranking, classification and many other machine learning tasks.项目地址: https://gitcode.com/GitHub_Trending/li/LightGBM创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表