数据竞赛达观杯(5)——LightGBM

本文探讨了GBDT存在的数据量、特征选择和稀疏数据问题,并介绍了LightGBM模型,包括其速度优势、低内存使用、并行化学习及原生类别特征支持。LightGBM通过histogram算法和leaf-wise生长策略提高效率,同时通过内存优化减少需求。此外,文章还涉及LightGBM的参数调整和模型实践。
摘要由CSDN通过智能技术生成

一. LightGBM模型

1.GBDT存在的几个问题

1.1 如何减少数据量

常用的减少训练数据量的方式是down sample。例如权重小于阈值的数据会被过滤掉,SGB在每一轮迭代中用随机的子集训练弱学习器;采样率会在训练过程中动态调整。但是,所有这些工作除了SGB外都是基于AdaBoost的,并且由于GBDT没有数据实例的权重,所以不能直接运用到GBDT上。虽然SGB可以应用到GBDT,但是它这种做法对acc影响太大了。

1.2 如何减少特征

为了减少特征的数量,需要过滤若特征。这通常用PCA和projection pursuit来做。可是,这些方法高度依赖一个假设,那就是特征包含相当多的冗余的信息。而这个假设在实践中通常不成立(因为通常特征都被设计为具有独特作用的,移除了哪个都可能对训练的acc有影响)

1.3 关于稀疏的数据

现实应用中的大规模数据通常是相当稀疏的。使用pre-sorted algorithm的GBDT可以通过忽略值为0的特征来降低训练的开销。而使用histogram-based algorithm的GBDT没有针对稀疏数据的优化方案,因为histogram-based algorithm无论特征值是否为0,都需要检索特征的bin值,所以它能够有效地利用这种稀疏特性。
为了解决上面的这些问题,我们提出了两个新的技术——GOSS和EFB。

2. 引入LightGBM

2.1 优点

  • 更快的训练效率
  • 低内存使用
  • 更高的准确率
  • 支持并行化学习
  • 可处理大规模数据
  • 原生支持类别特征,不需要对类别特征再进行0-1编码这类的

2.2 特点

  • histogram算法替换了传统的Pre-Sorted,某种意义上是牺牲了精度换取速度,直方图作差构建叶子直方图更有创造力(直方图算法的基本思想:先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。遍历数据时,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点[利于计算分割打分)
  • 带有深度限制的按叶子生长 (leaf-wise) 算法代替了传统的(level-wise) 决策树生长策略,提升精度,同时避免过拟合危险(不太深了)
  • 内存做了优化,内存中仅仅需要保存直方图数值,而不是之前的所有数据,另外如果直方图比较小的时候,我们还可以使用保存uint8的形式保存来训练数据。
  • 额外的优化还有Cache命中率优化、多线程优化。 lightGBM优越性:速度快,代码清晰,占用内存小。lightGBM可以在更小的代价下控制分裂树。有更好的缓存利用,是带有深度限制的按叶子生长的策略,使用了leaf-wise策略,每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后进行分裂,不断的进行循环下去,而lead-wise(智能)算法的缺点是可能生长出比较深的决策树,导致过拟合问题,为了解决过拟合问题,我们会在LightGBM中会对leaf-wise之上增加一个最大深度的限制,在保持高效率的同时防止过拟合。

二. lightGBM调参

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

三. lightGBM模型实践

  1. 准备数据
##读取数据
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer


train_data=pd.read_csv('datalab/14936/train_set.csv',nrows=5000)
##删除
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值