LightGBM
LGBM可以从libsvm TSV CSV TXT加载数据
Numpy 2维数组 pandas DF H2O Data Table Frame Scipy 稀疏矩阵
LightGBM 二进制文件
train_data= lgb.Dataset("train.svm.bin") #加载二进制文件
data = np.random.rand(500,10)
label = np.random.randint(2,size=500) # 指定生成0~1之间的500个对象
train_data = lgb.Dataset(data,label=label)
# 保存数据:
train_data = lgb.Dataset('train.svm.txt')
train_data.save_binary("train.bin")
# 生成验证数据集
validation_data = train_data.create_valid("validation.svm")
# 或者
validation_data = lgb.Dataset("validation.svm",reference=train_data)
# 在LGB中验证数据应该和训练数据对齐
# 可以使用feature_name 和 categorical_feature 关键字指定特征名和类别名
# LGB可以直接使用类别名做为输入,不需要使用独热码转换,但是类别应该被转换为整型
# 可以使用Weight关键字作为权重设置项 是一个numpy的ndarray数组
# 参数设置:
""""param = {'num_leaves':31,'objective':'binary'}
param['metric']='auc'
or param['metric']=['auc','binary_logloss']"""
num_round =10
bst = lgb.train(param,train_data,num_round,valid_sets=[validation_data])
bst.save_model('model.txt')
# 保存为json模型文件
json_model = bst.dump_model()
# 加载模型文件
bst = lgb.Booster(model_file='model.txt')
#交叉检验
lgb.cv(param,train_data,num_round,nfold=5)
#早停策略
bst = lgb.train(param,train_data,num_round,valid_sets=valid_sets,early_stopping_rounds=5)
bst.save_model('model.txt',num_iteration=bst.best_iteration)
# 设置早停策略,等待五轮要是没有更好的改善,直接结束,保存最好的结果
pred = bst.predict(data)
# num_iteration可以 用在预测部分用来进行指定迭代次数
#
API:
Dataset():
group:是用来做排序任务的
silent:是否在构建数据的过程中进行打印
params:用来传入模型的参数
free_raw_data: 是否释放原生数据
使用add_features_form()使用别的数据集来对当前数据集增加特征,补充数据
get_ref_chain()获得数据集对象链
construct() 构建数据集
num_data()/feature()获得数据集特征列数和目标列数
get_param()获得当前数据集的参数
subset(indices,params=None)获得索引和参数指定的子集
Booster():
params:
train_set:
model_file:模型文件的路径
model_str:加载模型文件的字符串路径
silent:
add_valid(data,name):添加验证数据
attr(key):获取提升机的属性字符串
current_iteration():获得当前的迭代索引
dump_model(num_iteration,start_iteration=0,importance_type='slit')
模型装载成json文件
eval(data,name,feval=None)支持自定义评估方式
feval : preds 预测值 一位数组或者是列表 eval_data 评估数据集
eval_train():在训练集上进行评估
eval_valid():在验证集上进行评估
get_leaf_output():得到一个叶子节点的输出
get_split_value_histogram():得到分离直方图
lower_bound():模型下界
model_from_string():加载字符串中的提升机
model_to_string():将提升机存为字符串
num_model_per_iteration():每次迭代得到的模型数量
num_trees():得到弱分类器的数量
refit():在新的数据上进行拟合
rollback_one_iter():回滚一次迭代
shuffle_models()随机打乱模型
update 一轮更新一次提升机
upper_bound():上界
train():
params:训练参数
train_set:训练数据集
num_boost_round:提升迭代的次数
valid_sets:验证数据集
valid_names:验证数据的名称
fobj:自定义的目标函数
pred train
grad 一阶导数 hess 二阶导数
early_stopping_round:是一个早停策略,需要设置验证集和评估指标
cv():
folds:
stratified:是否启用分层抽样
eval_train_metric:是否展示训练过程的评估精度
LGB自带绘图模块
plot_mportance():能够画出重要特征
booster ,importance_type,max_num_features 显示的最多特征数量
dpi 图的像素 grid 添加网格 precision 显示浮点数的精度
plot_split_value_histogram():画出分离直方图
booster,feature_name,bins 直方的最大数量
width_coef 直方的宽度, title 直方图的名字
figsize 图的大小
plot_metric():画出精度图
booster,metric,
dataset_names,后面都是一样的没什么意思
plot_tree():绘制指定的提升树
booster 这就是提升树模型
tree_index:要绘制的目标数的索引
show_info:显示那些信息
分离增益 子树内部数据项数 子树权重和 叶子节点数 叶子节点权重
节点内训练数据的百分比
precision:显示的数据精度
orientation:树的放置方向
create_tree_digraph: 绘制树的有向图
参数同上
register_logger()注册自定义日志
# 回调方法:
early_stopping():
stopping_round:早停时长 first_metric_only 是否只用第一个精确指标来评估早停
verbose 是否打印早停消息
print_evaluation():打印评估结果
period:几轮打印一次评估结果
show_stdv:显示标准差
record_evaluation():记录评估历史信息
eval_result :存放评估轮次的信息(字典)
reset_parameter():重置参数
parameter 参数列表
调参重要程度:
- max_depth and num_leaves 最大深度和叶子节点数量,叶子节点少于2^max_depth
- min_data_in_leaf max_bin 也就是间接控制叶子节点数量,控制模型训练速度 最大特征分割
- feature_fraction bagging_fraction bagging_freq 特征抽取比例 bagging比例
- l1,l2
- min_split_gain
分类任务使用LGBMClassifier 回归任务使用LGBMRegressor 排序任务使用 LGBMRanker
这三者参数相同
boosting_type:
有四种模式 GBDT 梯度提升树 DRAT丢弃多加性回归树
GOSS单边样本梯度提升 rf随机森林
num_leaves
max_depth 这两个是重要参数
learning rate 学习率
n_eastimator 拟合数量,迭代次数
subsample_for_bin 每个特征分段的子样本数量
objective Default: ‘regression’ for LGBMRegressor, ‘binary’ or ‘multiclass’ for LGBMClassifier, ‘lambdarank’ for LGBMRanker.
class_weight 类标签权重
min_split_gain
min_child_weight
min_child_sample 叶子节点中样本最少的数量
subsample 训练数据中子样本出现的比例
colsample_bytree 构建每个树的时候每个特征列使用子样本比例
reg_alpha l1
reg_lambda l2
random_state
n_jobs 多线程开启数量
silent
importance_type 两种 split 和gain
调参的时候使用较高的学习率,加快收敛速度
- 基本调参
- 正则化,减少过拟合
- 降低学习率,提升准确性
n_estimators/num_iterations/num_round/num_boost_round
这几个是跌代次数的参数
精度标准
这里就是代价函数的种类