一、LightGBM模型

1、XGBoost缺点

每轮迭代时,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。
预排序方法(pre-sorted):首先,空间消耗大。这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如排序后的索引,为了后续快速的计算分割点),这里需要消耗训练数据两倍的内存。其次时间上也有较大的开销,在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大。
对cache优化不友好。在预排序后,特征对梯度的访问是一种随机访问,并且不同的特征访问的顺序不一样,无法对cache进行优化。同时,在每一层长树的时候,需要随机访问一个行索引到叶子索引的数组,并且不同特征访问的顺序也不一样,也会造成较大的cache miss。

2、LightGBM简介

LightGBM模型是一种boosting框架,包含两个关键点:light即轻量级,GBM 梯度提升机。它可以说是分布式的,高效的,有以下优势:

更快的训练效率
低内存使用
更高的准确率
支持并行化学习
可处理大规模数据

3、LightGBM的特点

基于Histogram的决策树算法
带深度限制的Leaf-wise的叶子生长策略
直方图做差加速
直接支持类别特征(Categorical Feature)
Cache命中率优化
基于直方图的稀疏特征优化
多线程优化

(1)Histogram算法
基本思想:先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。遍历数据时,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。

(2)带深度限制的Leaf-wise的叶子生长策略
Level-wise过一次数据可以同时分裂同一层的叶子,容易进行多线程优化,也好控制模型复杂度,不容易过拟合。但实际上Level-wise是一种低效算法,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。

Leaf-wise则是一种更为高效的策略:每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。

Leaf-wise的缺点:可能会长出比较深的决策树,产生过拟合。因此LightGBM在Leaf-wise之上增加了一个最大深度限制,在保证高效率的同时防止过拟合。

二、LightGBM参数

LightGBM参数包括:核心参数,学习控制参数,IO参数,目标参数,度量参数,网络参数,GPU参数,模型参数,这里常修改的便是核心参数,学习控制参数,度量参数等。

所有的参数含义,参考:http://lightgbm.apachecn.org/cn/latest/Parameters.html

调参过程:

num_leaves
LightGBM使用的是leaf-wise的算法,因此在调节树的复杂程度时,使用的是num_leaves而不是max_depth。

大致换算关系:numleaves=2(maxdepth)

样本分布非平衡数据集:可以param[‘is_unbalance’]=’true’

Bagging参数:bagging_fraction+bagging_freq(必须同时设置)、feature_fraction

min_data_in_leaf、min_sum_hessian_in_leaf

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import f1_score
import time
import pickle
import lightgbm as LGB
from sklearn.externals import joblibt_start = time.time()
print("------------------程序开始---------------------")
"""=====================================================================================================================
0 自定义验证集的评价函数
"""
print("0 自定义验证集的评价函数")
def f1_score_vali(preds, data_vali):labels = data_vali.get_label()preds = np.argmax(preds.reshape(19, -1), axis=0)score_vali = f1_score(y_true=labels, y_pred=preds, average='macro')return 'f1_score', score_vali, True
"""=====================================================================================================================
1 读取数据,并转换到LGB的标准数据格式
"""
print("1 读取数据,并转换到LGB的标准数据格式")
data_fp = open('data_w_tfidf.pkl' , 'rb')
x_train, y_train, x_test = pickle.load(data_fp)
data_fp.close()
"""=====================================================================================================================
2 划分训练集和验证集,验证集比例为test_size
"""
print("划分训练集和验证集,验证集比例为test_size")
x_train, x_vali, y_train, y_vali = train_test_split(x_train, y_train, test_size=0.1, random_state=0)
d_train = LGB.Dataset(data=x_train, label=y_train)
d_vali = LGB.Dataset(data=x_vali, label=y_vali
"""=====================================================================================================================
3 训练LGB分类器
"""
print("3 训练LGB分类器")
params = {'boosting': 'gbdt','application': 'multiclassova','num_class': 19,'learning_rate': 0.1,'num_leaves': 31,'max_depth': -1,'lambda_l1': 0,'lambda_l2': 0.5,'bagging_fraction': 1.0,}bst = LGB.train(params, d_train, num_boost_round=800, valid_sets=d_vali, feval=f1_score_vali,early_stopping_rounds=None,verbose_eval=True)
joblib.dump(bst,"LGB_data_w_tfidf.m")
"""=====================================================================================================================
4 对测试集进行预测;将预测结果转换为官方标准格式;并将结果保存至本地
"""
print("4 对测试集进行预测;将预测结果转换为官方标准格式;并将结果保存至本地")
y_proba = bst.predict(x_test)
y_test = np.argmax(y_proba, axis=1) + 1df_result = pd.DataFrame(data={'id': range(5000), 'class': y_test.tolist()})
df_proba = pd.DataFrame(data={'id': range(5000), 'proba': y_proba.tolist()})df_result.to_csv('LGB_data_w_tfidf_result.csv', index=False)
df_proba.to_csv('LGB_data_w_tfidf_proba.csv', index=False)
t_end = time.time()
print("训练结束,耗时:{}min".format((t_end - t_start) / 60))



参考:https://blog.csdn.net/weixin_43314778/article/details/89289303
https://blog.csdn.net/ljfwz153076024/article/details/89075945
https://blog.csdn.net/u012736685/article/details/89289139

达观杯文本智能处理(5)相关推荐

  1. 第三届“达观杯”文本智能信息抽取挑战赛丰厚奖金,群英集结,等你来战!...

    近日,第三届"达观杯"文本智能信息抽取挑战赛正式上线启动(点击阅读原文,跳转报名页面),6月28日至8月31日,面向所有参赛选手开放竞赛结果提交.本届"达观杯" ...

  2. 【数据竞赛】“达观杯”文本智能处理挑战赛1

    一.数据竞赛简介 "达观杯"文本智能处理挑战赛 1.任务 建立模型通过长文本数据正文(article),预测文本对应的类别(class) 2.数据 传送门:链接: https:// ...

  3. 第三届“达观杯”文本智能算法大赛参赛指南

    比赛介绍 2019 年 6 月 28 日,第三届"达观杯"文本智能信息抽取挑战赛正式开赛,同期面向参赛选手开放竞赛结果提交.本届比赛由中国人工智能学会吴文俊人工智能科学技术奖办公室 ...

  4. “达观杯”文本智能处理挑战赛代码示例

    达观杯介绍: 类似kaggle的数据科学比赛,任何人可以参加 网址:http://www.dcjingsai.com/ 可以用支付宝实名注册 项目名称: "达观杯"文本智能处理挑战 ...

  5. 达观杯”文本智能处理挑战赛

    竞赛信息 1.网址 http://www.dcjingsai.com/common/cmpt/"达观杯"文本智能处理挑战赛_竞赛信息.html 2.任务 建立模型通过长文本数据正文 ...

  6. “达观杯”文本智能处理挑战赛,季军带你飞

    来自AI小白入门 前段时间和朋友何从庆(AI算法之心)等队友一起组队参加了这个比赛,本来以为小比赛人少,没想到参加的人会有几千人.最后我们队伍取得季军(4st/3131),虽有些许遗憾,但是也很荣幸认 ...

  7. “达观杯”文本智能处理挑战赛

         (本内容转载自公众号"科技与Python") 2018年人工智能的发展在运算智能和感知智能已经取得了很大的突破和优于人类的表现.而在以理解人类语言为入口的认知智能上,目前 ...

  8. 【数据竞赛】“达观杯”文本智能处理挑战赛2

    文章目录 一.TF_IDF原理 1.TF(item frequency) 2.逆向文件频率IDF(inverse document frequency) 3.TF-IDF 二.TF-IDF算法实现 1 ...

  9. 【数据竞赛】“达观杯”文本智能处理挑战赛4

    一.逻辑回归 逻辑回归(Logistic Regression, LR)是一种常用的处理两类分类问题的线性模型. 1.概率估计 LR 模型计算输入特征的加权和(加上偏差项),之后将中间结果输入 log ...

  10. 【数据竞赛】“达观杯”文本智能处理挑战赛3

    一.语言模型 在统计自然语言处理中,语言模型指的是计算一个句子的概率模型. 传统的语言模型 词的表示是原始的.面向字符串的. 向量角度:更高维.更稀疏的向量.若词汇表大小为 NNN,每个字符串形式的词 ...

最新文章

  1. spell_picture3.1版本windows上手动拼图的软件的升级
  2. Silverlight动态设置WCF服务Endpoint
  3. 中国AI服务器,刷新全球18项性能基准测试纪录
  4. 嵌套 思维导图_工作小Tips:如何用思维导图来整理你的汇报
  5. tomcat配置与应用(2)
  6. 逆向-攻防世界-reverse-box
  7. Kafka源码解析 - 副本迁移任务提交流程
  8. 【机房收费系统】---组合查询
  9. Unity3D基础27:C#随机函数与物体销毁
  10. 再次翻看WCF的书籍
  11. 涉密计算机用户密码操作规程,涉密计算机管理设置密码
  12. c语言谱曲软件,基于C语言的音乐谱曲技巧与应用研究
  13. 数据库.数据库管理系统.数据库系统三者之间的关系
  14. 苹果系统下载了python软件怎么卸载_mac怎么卸载pycharm
  15. C++在使用fgetc读取文件时出现方框乱码
  16. 高通 android 7.0 插入蓝牙耳机,声音变的最大!
  17. poj 1125 Stockbroker(多源最短路径)
  18. mico3165嵌入式开发板IAR环境搭建以及Demo运行
  19. 测试容器网络带宽,限制容器对内存,对CPU的使用
  20. 可道云上传文件后报错

热门文章

  1. C++STL——vector初探
  2. 开源项目filepond的独立自由之路:城市套路深
  3. BZOJ 2005 2005: [Noi2010]能量采集 | 容斥原理
  4. 自定义获取焦点的TextView
  5. Linux上层应用--Shell scripts基础规范
  6. 20144303 《Java程序设计》第一周学习总结
  7. SQL 错误代码汇总
  8. 完美解决VB中int to short溢出问题
  9. 如何取得GridView被隐藏列的值
  10. nginx下Thinkphp 隐藏index.php