lightgbm的使用和参数说明

更新时间:2023-05-20 08:06:34 阅读: 评论:0

lightgbm的使⽤和参数说明
⽂章⽬录
u
两种的底层都是⼀致的
import lightgbm as lgb
import lightgbm as lgb
data interface
LightGBM Python 模块能够使⽤以下⼏种⽅式来加载数据:
libsvm/tsv/csv txt format file(libsvm/tsv/csv ⽂本⽂件格式)
Numpy 2D array, pandas object(Numpy 2维数组, pandas 对象)
LightGBM binary file(LightGBM ⼆进制⽂件)
np 2D array形式:
data = np.random.rand(500,10)# 500 个样本, 每⼀个包含 10 个特征
label = np.random.randint(2, size=500)# ⼆元⽬标变量,  0 和 1
train_data = lgb.Datat(data, label=label)
还可以:指定 feature names(特征名称)和 categorical features(分类特征)、设置权重、分数等【具体见⽂档】
设置参数
LightGBM 可以使⽤⼀个 pairs 的 list 或⼀个字典来设置参数. 例如:
Booster(提升器)参数:
param = {'num_leaves':31, 'num_trees':100, 'objective':'binary'}
param['metric'] = 'auc'
您还可以指定多个 eval 指标:
param['metric'] = ['auc', 'binary_logloss']
训练、预测
训练
param_list、train_datat是必需的
num_round =10
bst = ain(param, train_data, num_round, valid_ts=[test_data])
LightGBM 也⽀持加权训练,它需要⼀个额外的 。 它需要额外的 ⽤于排名任务。
⽀持交叉验证
num_round =10linux培训机构
lgb.cv(param, train_data, num_round, nfold=5)
⽀持提前停⽌
valid_ts:⾄少有⼀个. 如果有多个,它们都会被使⽤(如果有⼀个验证集)。
该模型将开始训练, 直到验证得分停⽌提⾼为⽌. 验证错误需要⾄少每个 early_stopping_rounds 减少以继续训练.
如果提前停⽌, 模型将有 1 个额外的字段: bst.best_iteration. 请注意 train() 将从最后⼀次迭代中返回⼀个模型, ⽽不是最好的⼀个.
如果您指定多个评估指标, 则它们都会⽤于提前停⽌.
bst = ain(param, train_data, num_round, valid_ts=valid_ts, early_stopping_rounds=10)
bst.save_model('', num_iteration=bst.best_iteration)
预测
# 7 个样本, 每⼀个包含 10 个特征
data = np.random.rand(7,10)
ypred = bst.predict(data)
如果在训练过程中启⽤了提前停⽌, 可以⽤ bst.best_iteration 从最佳迭代中获得预测结果:
ypred = bst.predict(data, num_iteration=bst.best_iteration)
模型保存
在训练完成后, 可以使⽤如下⽅式来存储模型:
bst.save_model('')
训练后的模型也可以转存为 JSON 的格式:
json_model = bst.dump_model()
以保存模型也可以使⽤如下的⽅式来加载.
bst = lgb.Booster(model_file='')#init model
[具体见⽂档]
lightgbm.sklearn.LGBMClassifier()
同sklearn⽅式
fit函数包含了早停等
tuning
LightGBM 使⽤ 的树⽣长策略, ⽽很多其他流⾏的算法采⽤ depth-wi 的树⽣长策略. 与 depth-wi 的树⽣长策略相较, leaf-wi 算法可以收敛的更快. 但是, 如果参数选择不当的话, leaf-wi 算法有可能导致过拟合.
ref:
note:
针对 Leaf-wi (最佳优先) 树的参数优化
1. num_leaves
控制树模型复杂度的主要参数。应让其⼩于2^(max_depth),因为depth 的概念在 leaf-wi 树中并没有多⼤作⽤,并不存在从leaves到depth的映射
2. min_data_in_leaf
⽤于处理过拟合,该值取决于训练样本数和num_leaves,⼏百或⼏千即可。设置较⼤避免⽣成⼀个过深的树,可能导致⽋拟合。
min_data_in_leaf, default=20, type=int, alias=min_data_per_leaf , min_data, min_child_samples
1. ⼀个叶⼦上数据的最⼩数量. 可以⽤来处理过拟合.
汽车空调不制冷3. max_depth
显⽰限制树的深度
商君书翻译针对更快的训练速度
通过设置 bagging_fraction 和 bagging_freq 参数来使⽤ bagging ⽅法
通过设置 feature_fraction 参数来使⽤特征的⼦抽样
使⽤较⼩的 max_bin
使⽤ save_binary 在未来的学习过程对数据加载进⾏加速
difficult的反义词
使⽤并⾏学习, 可参考
针对更好的准确率
使⽤较⼤的 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 来避免⽣成过深的树
具体调参⽅式总结
可以查看参数的别名和说明,如果调参出现重名,就会报warning。如:lambda_l1 is t=0, reg_alpha=0.0 will be ignored. Current value: lambda_l1=0
对于基于决策树的模型,调参的⽅法都是⼤同⼩异。⼀般都需要如下步骤:
1. ⾸先选择较⾼的学习率,⼤概0.1附近,这样是为了加快收敛的速度。这对于调参是很有必要的。
2. 对决策树基本参数调参
3. 正则化参数调参
4. 最后降低学习率,这⾥是为了最后提⾼准确率
other_params ={'num_leaves':31,'objective':None,'learning_rate':0.1,'max_depth':-1,'reg_alpha':0.0, 'reg_lambda':0.0,'n_estimators':100,'boosting_type':'gbdt','device':'gpu',
'min_child_samples':20,'subsample':1.0,'subsample_freq':0,'colsample_bytree':1.0,
'class_weight':None,'importance_type':'split',
'min_child_weight':0.001,'min_split_gain':0.0,'n_jobs':-1,'random_state':None,
'subsample_for_bin':200000,'silent':True}
data_list_dict = get_data_np_dict(cell_name, feature_name, method_name)
# 第⼀次:max_depth、num_leaves
print("第⼀次")
cv_params ={'max_depth':[-1,0,3,4,5,6,7,8],'num_leaves':range(21,200,10)}
# cv_params = {'max_depth': range(3, 8, 4), 'num_leaves': range(5, 100, 45)}
best_params = lgb_grid_greedy(cv_params, other_params,'1')
other_params.update(best_params)
# 第⼆次
print("第⼆次")
cv_params ={'max_bin':range(5,256,10),'min_child_samples':range(10,201,10)}
# cv_params = {'max_bin': range(5, 256, 100), 'min_child_samples': range(1, 102, 50)}
# cv_params = {'max_depth': [3, 4, ], 'min_child_weight': [1, 2, ]}
best_params = lgb_grid_greedy(cv_params, other_params,'2')
other_params.update(best_params)
# print(other_params)
# 第三次
print("第三次")
cv_params ={'colsample_bytree':[0.6,0.7,0.8,0.9,1.0],
'subsample':[0.6,0.7,0.8,0.9,1.0],
'subsample_freq':range(0,81,10)
}
# cv_params = {'colsample_bytree': [0.6, 0.7, ],
#              'subsample': [0.6, 0.7, ],
#              'subsample_freq': range(0, 81, 40)
#              }
best_params = lgb_grid_greedy(cv_params, other_params,'3')
other_params.update(best_params)
# print(other_params)
# 第四次
print("第四次")
开车基本步骤
cv_params ={'reg_alpha':[1e-5,1e-3,1e-1,0.0,0.1,0.3,0.5,0.7,0.9,1.0],
'reg_lambda':[1e-5,1e-3,1e-1,0.0,0.1,0.3,0.5,0.7,0.9,1.0]
every single day
}
# cv_params = {'reg_alpha': [1e-5, 1e-3, ],
#              'reg_lambda': [1e-5, 1e-3, ]
#              }
best_params = lgb_grid_greedy(cv_params, other_params,'4')
other_params.update(best_params)
# print(other_params)
# 第五次
6 1儿童节手抄报print("第五次")
cv_params ={'min_split_gain':[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]}
emerge
# cv_params = {'min_split_gain': [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]}
best_params = lgb_grid_greedy(cv_params, other_params,'5')
other_params.update(best_params)
other_params.update(best_params)
# print(other_params)
# 第六次悉尼大学世界排名
print("第六次")
cv_params ={'learning_rate':[0.001,0.01,0.05,0.07,0.1,0.2,0.5,0.75,1.0]} # cv_params = {'learning_rate': [0.01, 0.05, ]}
best_params = lgb_grid_greedy(cv_params, other_params,'6')
other_params.update(best_params)
# print(other_params)

本文发布于:2023-05-20 08:06:34,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/115550.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:训练   参数   模型   设置
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图