LightGBM:Focus on Parameters | l
作者:
冰源 | 来源:发表于
2018-09-14 16:29 被阅读558次
lgb中bin的理解与调整
LightGBM相关了解
LightGBM好文分享
- 基于预排序的算法
针对每个特征,所有数据根据 在该特征下的特征值 进行排序; 计算所有可能的分割点带来的分割增益,确定分割点;分为左右子树。
- 直方图算法
针对每个特征(连续型数值),使用直方图将数据 在该特征下的特征值 离散为 k个bin,并转化为bin的label; 计算k个bin分别作为分割点带来的分割增益,确定分割点;分为左右子树,只要确定了左子树所有特征对应直方图,用父节点直方图相减,即可得到右节点直方图。
核心参数
参数 |
默认值 |
类型 |
说明 |
config |
"" |
string |
配置文件路径 |
task |
train |
enum |
options={ train, predict, convert_model } |
application |
regression |
enum |
options={ regression, regression_l1,......,binary, multiclass,...... } |
boosting |
gbdt |
enum |
options={ gbdt, rf, dart, goss },关注下dart :Dropouts meet Multiple Additive Regression Trees
|
data |
"" |
string |
训练数据 |
valid |
"" |
multi-string |
验证/测试 数据,支持多验证数据集, 以" , "分割 |
num_iterations |
100 |
int |
boosting 的迭代次数 |
learning_rate |
0.1 |
double |
学习率 |
num_leaves |
31 |
int |
一棵树上的叶子数 |
tree_learner |
serial |
enum |
options={ serial, feature, data, voting } 特征/数据/投票并行 |
num_threads |
OpenMP_default |
int |
LightGBM 的线程数 |
device |
cpu |
|
options={ cpu, gpu } |
学习控制参数
参数 |
默认值 |
类型 |
说明 |
max_depth |
-1 |
int |
树的深度 |
min_data_in_leaf |
20 |
int |
一个叶子上数据的最小数量. 可以用来处理过拟合 |
min_sum_hessian_in_leaf |
1e-3 |
double |
一个叶子上的最小 hessian 和 |
feature_fraction |
1.0 |
double |
随机选择部分特征 |
feature_fraction_seed |
2 |
int |
随机数种子 |
bagging_fraction |
1.0 |
double |
在不进行重采样的情况下随机选择部分数据 |
bagging_freq |
0 |
int |
bagging 的频率, 0 意味着禁用 bagging. k 意味着每 k 次迭代执行bagging |
bagging_seed |
3 |
int |
bagging 随机数种子 |
early_stopping_round |
0 |
int |
如果一个验证集的度量在 early_stopping_round 循环中没有提升, 将停止训练 |
lambda_l1 |
0 |
double |
L1 正则 |
lambda_l2 |
0 |
double |
L2 正则 |
min_split_gain |
0 |
double |
执行切分的最小增益 |
IO参数
参数 |
默认值 |
类型 |
说明 |
max_bin |
255 |
int |
连续值离散化时bin的最大个数 |
min_data_in_bin |
3 |
int |
单个bin含有的最小数, 使用此方法避免 one-data-one-bin(可能会过度学习) |
output_model |
LightGBM_model.txt |
string |
输出的模型文件名 |
input_model |
"" |
string |
输入的模型文件名 |
output_result |
LightGBM_predict_result.txt |
string |
prediction 任务的预测结果文件名 |
model_format |
text |
multi-enum |
可选项={ text, proto }, 保存和加载模型的格式 |
verbosity |
1 |
int |
<0 = 致命的, =0 = 错误 (警告), >0 = 信息 |
header |
false |
bool |
如果输入数据有标识头, 则在此处设置 true |
save_binary |
false |
bool |
如果设置为 true LightGBM 则将数据集(包括验证数据)保存到二进制文件中。 可以加快数据加载速度。 |
label |
"" |
string /int |
指定标签列; 用于索引的数字, e.g. label=0 意味着 column_0 是标签列 |
weight |
"" |
string /int |
列的指定; 用于索引的数字, e.g. weight=0 表示 column_0 是权重点 |
ignore_column |
"" |
string |
在训练中指定一些忽略的列 |
categorical_feature |
"" |
string |
指定分类特征; 用数字做索引, e.g. categorical_feature=0,1,2 意味着 column_0, column_1 和 column_2 是分类特征 |
bin_construct_sample_cnt |
200000 |
int |
用来构建直方图的数据的数量 |
目标参数:主要关于loss的参数
参数 |
默认值 |
类型 |
说明 |
sigmoid |
1.0 |
double |
sigmoid 函数的参数. 将用于 binary 分类 和 lambdarank |
gaussian_eta |
1.0 |
double |
控制高斯函数的宽度的参数. 将用于 regression_l1 和 huber losses |
is_unbalance |
false |
bool |
用于 binary 分类 ,如果培训数据不平衡 设置为 true |
num_class |
1 |
int |
只用于 multiclass 分类 |
度量参数
参数 |
默认值 |
类型 |
说明 |
metric |
{l2 for regression}, {binary_logloss for binary classification}, … |
|
适配各不同任务不同评价指标 |
GPU参数
参数 |
默认值 |
类型 |
说明 |
gpu_device_id |
-1 |
int |
|
gpu_use_dp |
false |
bool |
设置为 true 在GPU上使用双精度GPU (默认使用单精度) |
参数优化
针对 Leaf-wise (最佳优先) 树的参数优化
参数 |
说明 |
num_leaves |
理论上, 借鉴 depth-wise 树, 我们可以设置 num_leaves = 2^(max_depth ),但是最好让其小于 2^(max_depth )。比如num_leaves 可以设置为 127 时, 127有可能会导致过拟合, 而将其设置为 70 或 80 时可能会得到比 depth-wise 树更高的准确率 |
min_data_in_leaf |
这是处理 leaf-wise 树的过拟合问题中一个非常重要的参数. 它的值取决于训练数据的样本个树和 num_leaves . 将其设置的较大可以避免生成一个过深的树, 但有可能导致欠拟合. 实际应用中, 对于大数据集, 设置其为几百或几千就足够了. |
max_depth |
也可以利用 max_depth 来显式地限制树的深度. |
针对更快的训练速度
说明 |
通过设置 bagging_fraction 和 bagging_freq 参数来使用 bagging 方法 |
通过设置 feature_fraction 参数来使用特征的子抽样 |
使用较小的 max_bin
|
使用 save_binary 在未来的学习过程对数据加载进行加速 |
使用并行学习, 可参考 并行学习指南
|
针对更好的准确率
说明 |
使用较大的 max_bin (学习速度可能变慢) |
使用较小的 learning_rate 和较大的 num_iterations
|
使用较大的 num_leaves (可能导致过拟合) |
使用更大的训练数据 |
尝试 dart
|
处理过拟合
说明 |
使用较小的 max_bin
|
使用较小的 num_leaves
|
使用 min_data_in_leaf 和 min_sum_hessian_in_leaf
|
通过设置 bagging_fraction 和 bagging_freq 来使用 bagging |
通过设置feature_fraction 来使用特征子抽样 |
使用更大的训练数据 |
使用 lambda_l1 , lambda_l2 和 min_gain_to_split 来使用正则 |
尝试 max_depth 来避免生成过深的树 |
本文标题:LightGBM:Focus on Parameters | l
本文链接:https://www.haomeiwen.com/subject/gnzngftx.html
网友评论