LightGBM

LGBM可以从libsvm TSV CSV TXT加载数据

Numpy 2维数组 pandas DF H2O Data Table Frame Scipy 稀疏矩阵

LightGBM 二进制文件

  1. train_data= lgb.Dataset("train.svm.bin") #加载二进制文件
  2. data = np.random.rand(500,10)
  3. label = np.random.randint(2,size=500) # 指定生成0~1之间的500个对象
  4. train_data = lgb.Dataset(data,label=label)
  5. # 保存数据:
  6. train_data = lgb.Dataset('train.svm.txt')
  7. train_data.save_binary("train.bin")
  8. # 生成验证数据集
  9. validation_data = train_data.create_valid("validation.svm")
  10. # 或者
  11. validation_data = lgb.Dataset("validation.svm",reference=train_data)
  12. # 在LGB中验证数据应该和训练数据对齐
  13. # 可以使用feature_name 和 categorical_feature 关键字指定特征名和类别名
  14. # LGB可以直接使用类别名做为输入,不需要使用独热码转换,但是类别应该被转换为整型
  15. # 可以使用Weight关键字作为权重设置项 是一个numpy的ndarray数组
  16. # 参数设置:
  17. """"param = {'num_leaves':31,'objective':'binary'}
  18. param['metric']='auc'
  19. or param['metric']=['auc','binary_logloss']"""
  20. num_round =10
  21. bst = lgb.train(param,train_data,num_round,valid_sets=[validation_data])
  22. bst.save_model('model.txt')
  23. # 保存为json模型文件
  24. json_model = bst.dump_model()
  25. # 加载模型文件
  26. bst = lgb.Booster(model_file='model.txt')
  27. #交叉检验
  28. lgb.cv(param,train_data,num_round,nfold=5)
  29. #早停策略
  30. bst = lgb.train(param,train_data,num_round,valid_sets=valid_sets,early_stopping_rounds=5)
  31. bst.save_model('model.txt',num_iteration=bst.best_iteration)
  32. # 设置早停策略,等待五轮要是没有更好的改善,直接结束,保存最好的结果
  33. pred = bst.predict(data)
  34. # num_iteration可以 用在预测部分用来进行指定迭代次数
  35. #
  36. API:
  37. Dataset():
  38. group:是用来做排序任务的
  39. silent:是否在构建数据的过程中进行打印
  40. params:用来传入模型的参数
  41. free_raw_data: 是否释放原生数据
  42. 使用add_features_form()使用别的数据集来对当前数据集增加特征,补充数据
  43. get_ref_chain()获得数据集对象链
  44. construct() 构建数据集
  45. num_data()/feature()获得数据集特征列数和目标列数
  46. get_param()获得当前数据集的参数
  47. subset(indices,params=None)获得索引和参数指定的子集
  48. Booster():
  49. params:
  50. train_set:
  51. model_file:模型文件的路径
  52. model_str:加载模型文件的字符串路径
  53. silent:
  54. add_valid(data,name):添加验证数据
  55. attr(key):获取提升机的属性字符串
  56. current_iteration():获得当前的迭代索引
  57. dump_model(num_iteration,start_iteration=0,importance_type='slit')
  58. 模型装载成json文件
  59. eval(data,name,feval=None)支持自定义评估方式
  60. feval : preds 预测值 一位数组或者是列表 eval_data 评估数据集
  61. eval_train():在训练集上进行评估
  62. eval_valid():在验证集上进行评估
  63. get_leaf_output():得到一个叶子节点的输出
  64. get_split_value_histogram():得到分离直方图
  65. lower_bound():模型下界
  66. model_from_string():加载字符串中的提升机
  67. model_to_string():将提升机存为字符串
  68. num_model_per_iteration():每次迭代得到的模型数量
  69. num_trees():得到弱分类器的数量
  70. refit():在新的数据上进行拟合
  71. rollback_one_iter():回滚一次迭代
  72. shuffle_models()随机打乱模型
  73. update 一轮更新一次提升机
  74. upper_bound():上界
  75. train():
  76. params:训练参数
  77. train_set:训练数据集
  78. num_boost_round:提升迭代的次数
  79. valid_sets:验证数据集
  80. valid_names:验证数据的名称
  81. fobj:自定义的目标函数
  82. pred train
  83. grad 一阶导数 hess 二阶导数
  84. early_stopping_round:是一个早停策略,需要设置验证集和评估指标
  85. cv():
  86. folds:
  87. stratified:是否启用分层抽样
  88. eval_train_metric:是否展示训练过程的评估精度
  89. LGB自带绘图模块
  90. plot_mportance():能够画出重要特征
  91. booster importance_type,max_num_features 显示的最多特征数量
  92. dpi 图的像素 grid 添加网格 precision 显示浮点数的精度
  93. plot_split_value_histogram():画出分离直方图
  94. booster,feature_name,bins 直方的最大数量
  95. width_coef 直方的宽度, title 直方图的名字
  96. figsize 图的大小
  97. plot_metric():画出精度图
  98. booster,metric,
  99. dataset_names,后面都是一样的没什么意思
  100. plot_tree():绘制指定的提升树
  101. booster 这就是提升树模型
  102. tree_index:要绘制的目标数的索引
  103. show_info:显示那些信息
  104. 分离增益 子树内部数据项数 子树权重和 叶子节点数 叶子节点权重
  105. 节点内训练数据的百分比
  106. precision:显示的数据精度
  107. orientation:树的放置方向
  108. create_tree_digraph: 绘制树的有向图
  109. 参数同上
  110. register_logger()注册自定义日志
  111. # 回调方法:
  112. early_stopping():
  113. stopping_round:早停时长 first_metric_only 是否只用第一个精确指标来评估早停
  114. verbose 是否打印早停消息
  115. print_evaluation():打印评估结果
  116. period:几轮打印一次评估结果
  117. show_stdv:显示标准差
  118. record_evaluation():记录评估历史信息
  119. eval_result :存放评估轮次的信息(字典)
  120. reset_parameter():重置参数
  121. parameter 参数列表

调参重要程度:

  1. max_depth and num_leaves 最大深度和叶子节点数量,叶子节点少于2^max_depth
  2. min_data_in_leaf max_bin 也就是间接控制叶子节点数量,控制模型训练速度 最大特征分割
  3. feature_fraction bagging_fraction bagging_freq 特征抽取比例 bagging比例
  4. l1,l2
  5. min_split_gain
  1. 分类任务使用LGBMClassifier 回归任务使用LGBMRegressor 排序任务使用 LGBMRanker
  2. 这三者参数相同
  3. boosting_type:
  4. 有四种模式 GBDT 梯度提升树 DRAT丢弃多加性回归树
  5. GOSS单边样本梯度提升 rf随机森林
  6. num_leaves
  7. max_depth 这两个是重要参数
  8. learning rate 学习率
  9. n_eastimator 拟合数量,迭代次数
  10. subsample_for_bin 每个特征分段的子样本数量
  11. objective Default: regression for LGBMRegressor, binary or multiclass for LGBMClassifier, lambdarank for LGBMRanker.
  12. class_weight 类标签权重
  13. min_split_gain
  14. min_child_weight
  15. min_child_sample 叶子节点中样本最少的数量
  16. subsample 训练数据中子样本出现的比例
  17. colsample_bytree 构建每个树的时候每个特征列使用子样本比例
  18. reg_alpha l1
  19. reg_lambda l2
  20. random_state
  21. n_jobs 多线程开启数量
  22. silent
  23. importance_type 两种 split gain

调参的时候使用较高的学习率,加快收敛速度

  1. 基本调参
  2. 正则化,减少过拟合
  3. 降低学习率,提升准确性

n_estimators/num_iterations/num_round/num_boost_round

这几个是跌代次数的参数

精度标准

这里就是代价函数的种类