原论文:

lightgbm原理:

gbdt困点:

gbdt是受欢迎的机器学习算法,当特征维度很高或数据量很大时,有效性和可拓展性没法满足。lightgbm提出GOSS(Gradient-based One-Side Sampling)和EFB(Exclusive Feature Bundling)进行改进。lightgbm与传统的gbdt在达到相同的精确度时,快20倍。

Gradient-based One-Side Sampling (Goss):在GBDT中,数据集没有权重,注意到让不同梯度的数据集在计算信息增益时产生不同的作用。根据信息增益的定义,对于有更大梯度(即训练不足的数据集)将产生更多信息增益。于是,当降低数据集的数据量时,通过保持大梯度的数据集,随机丢掉小梯度的数据集,保持信息增益的准确性。

GOSS保持所有具有大梯度的数据集,在小梯度数据集上随机采样。为了抵消对数据分布的影响,GOSS小梯度的样本数据在计算信息增益时引入系数(1-a)/b。具体来说,

GOSS首先按照数据集的梯度绝对值进行排序,选取最大的a*100%数据集保留;

然后从剩余数据集中随机选取b*100%;

最后,GOSS对于小梯度乘以常数(1-a)/b放大了样本数据。这样做,我们能不改变原始数据的分布,集中注意力在训练不足的数据上。

收敛分析表明,GOSS算法不会太多降低训练复杂度,并且超越随机选样本。

Exclusive Feature Bundling(EFB). 高维数据通常非常稀疏。特征空间的稀疏性为我们提供了一个设计一种几乎无损的方法来减少特征数量的可能性。具体地说,在一个稀疏的特征空间,许多特征是互斥的,即,它们从不同时取非零值。我们可以安全地将互斥特征捆绑到一个单一的特征中(称之为互斥特征束)。通过精心设计的特征扫描算法,我们可以构建与个体特征类似的基于特征束的特征直方图。这样,直方图构建的复杂性从

,其中

。这样我们可以在不影响准确性情况下大大加快对GBDT的训练。

我们的问题对应于图着色问题,反之亦然,因此可以使用贪婪算法来解决。

EFB算法可以将许多互斥性特征捆绑到更少的密集特征上,这可以有效避免了零特征值的不必要计算。事实上,我们也可以通过忽略零特征值,使用表格记录特征非零值的直方图算法。通过扫描表中的数据,直方图构建成本将从

变为

。然而,该方法在树生长过程中需要额外的内存和计算成本来维护这些特征表。我们可以以LightGBM为基本函数按此进行优化。注:这种优化不与EFB冲突,因为我们在捆束稀疏时,依然可以使用它。

EFB合并了许多稀疏特征(包括编码特性和隐式互斥性特征),成为少得多的特征。在捆绑过程中包含了基本稀疏特征优化。然而,EFB在树学习过程中为每个特征维护非零数据表,没有额外的成本。更重要的是,因为许多先前孤立的特征被捆绑在一起,它可以增加空间局部性和显著改进缓存命中率。因此,整体效率的提高是引人注目的。以上分析表明,EFB是一种非常有效的在直方图中利用稀疏属性的算法,可以为GBDT训练过程带来显著的加速。

python代码:

import lightgbm

clf=lightgbm

train_matrix = clf.Dataset(tr_x, label=tr_y)

test_matrix = clf.Dataset(te_x, label=te_y)

#z = clf.Dataset(test_x, label=te_y)

#z=test_x

params = {

#                 'boosting_type': 'gbdt',

#                 'learning_rate': 0.01,

#                 'objective': 'binary',

#                 'metric': 'auc',

#                 'min_child_weight': 1.5,

#                 'num_leaves': 2 ** 5,

#                 'lambda_l2': 10,

#                 'subsample': 0.9,

#                 'colsample_bytree': 0.7,

#                 'colsample_bylevel': 0.7,

#                 'learning_rate': 0.01,

#                 'seed': 2017,

#                 'nthread': 12,

#                 'silent': True,

'task': 'train',

'learning_rate': 0.005,

#                         'max_depth': 8,

#                         'num_leaves':2**6-1,

'boosting_type': 'gbdt',

'objective': 'binary',

#                         'is_unbalance':True,

'feature_fraction': 0.8,

'metric':'auc',

'bagging_fraction': 0.86,

#                         'lambda_l1': 0.0001,

'lambda_l2': 49,

'bagging_freq':3,

#                         'min_data_in_leaf':5,

'verbose': 1,

'random_state': 2267,

}

num_round = 10000

early_stopping_rounds = 300

if test_matrix:

model = clf.train(params, train_matrix,num_round,valid_sets=test_matrix,

early_stopping_rounds=early_stopping_rounds,verbose_eval=300

)

pre= model.predict(te_x,num_iteration=model.best_iteration).reshape((te_x.shape[0],1))

train[test_index]=pre

test_pre[i, :]= model.predict(test_x, num_iteration=model.best_iteration).reshape((test_x.shape[0],1))

cv_scores.append(roc_auc_score(te_y, pre))

python原理及代码_lightgbm原理以及Python代码相关推荐

  1. python在线编译-python在线编译器的简单原理及简单实现代码

    我们先来看一下效果(简单的写了一个): 原理:将post请求的代码数据写入了服务器的一个文件,然后用服务器的python编译器执行返回结果 实现代码: #flaskrun.py # -*- codin ...

  2. 在线python编程编译器-python在线编译器的简单原理及简单实现代码

    我们先来看一下效果(简单的写了一个): 原理:将post请求的代码数据写入了服务器的一个文件,然后用服务器的python编译器执行返回结果 实现代码: #flaskrun.py # -*- codin ...

  3. python语言用什么来表明每行代码的层次关系_2021年尔雅通识课《切削原理与刀具》课后习题答案...

    2021年尔雅通识课<切削原理与刀具>课后习题答案 二战后南海局势比较稳定的原因不包括() 答:冷战后相当长时间内,中美战略关系极不稳定 日本是一个多地震国家,主要因为它位于海岛上. 答: ...

  4. python解析原理_代码详解:Python虚拟环境的原理及使用

    Python的虚拟环境极大地方便了人们的生活.本指南先介绍虚拟环境的基础知识以及使用方法,然后再深入介绍虚拟环境背后的工作原理. 注意:本指南在macOS Mojave系统上使用最新版本的Python ...

  5. java寻优算法_模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径...

    模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...

  6. python扫雷的代码及原理_基于Python实现的扫雷游戏实例代码

    摘要:这篇Python开发技术栏目下的"基于Python实现的扫雷游戏实例代码",介绍的技术点是"Python实现.Python.实例代码.扫雷游戏.扫雷.游戏" ...

  7. python混淆ios代码_XSDK——iOS代码混淆原理

    我们在XSDK的iOS版本中, 除了AppStore官方支付之外还集成了第三方支付(微信支付H5和支付宝支付H5版本). 如果用于企业签,不需要做处理,直接使用即可. 但是如果需要上架AppStore ...

  8. Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net

    Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net 1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距 ...

  9. python中迭代器的实现原理_Python 进阶应用教程

    Python 中的迭代器实现原理 在数学中,集合表示由一个或多个确定的元素所构成的整体.在 Python 中,列表.元组.集合可以用于表示数学中的集合. 例如,分别使用列表.元组.集合表示了一个包含 ...

最新文章

  1. 为何而生、What I have Lived for
  2. 产品经理等级的划分,来看看你是几级的PM?
  3. 庖丁解牛看委托和事件(续)
  4. SAP Spartacus UserService.get方法的调用时机
  5. 栈溢出笔记1.12 栈Cookie
  6. 信息学奥赛一本通 1021:打印字符 | OpenJudge NOI 1.2 08
  7. 如何将物理服务器转换成基于的Vmware ESXi虚拟服务器
  8. ## CSP 201609-2 火车购票购买,C语言版(90分版)
  9. 如何在linux安装gcc,如何在Linux安装gcc
  10. WPS Mac旧版该怎么彻底卸载干净
  11. Linux 多线程同步之哲学家用餐问题分析
  12. 如何在cisco官网上下载Cisco packet tracer模拟器
  13. 【PPT技巧】让PPT背景音乐仅在播放视频时暂停
  14. JAVA初学,小白编程,8大基本类型
  15. 程序员找不到对象是伪命题?他用大数据找对象,现在婚都结了
  16. GCC 9.4 编译error: catching polymorphic type ‘class std::bad_alloc’ by value [-Werror=catch-value=]
  17. 最新公司级 OKRs 案例
  18. [设计模式](十):策略模式(Strategy)与模板模式(Template)详解及二者间区别介绍(两种父子类行为模式)
  19. L1,L2正则化理解-奥卡姆剃刀(Occam's razor)原理
  20. python给定一个整数n、判断n是否为素数_Python判断一个整数是否为素数

热门文章

  1. 01屏幕增强 sap_SAP (MM01 MM02 MM03)屏幕增强
  2. C++根据系统时间生成不重复的随机数
  3. C语言---链表的创建
  4. linux测试tensorflow-gpu 2.0是否安装成功
  5. Unity官方宣传片Adam 播放地址
  6. D-News|英特尔首推融合现实,亚马逊云服务市场占比超3成
  7. 企业级整站集群数据备份项目方案详解
  8. 3月第1周网络安全报告:发现放马站点域名仍为162个
  9. STL学习系列七:优先级队列priority_queue容器
  10. CISCO交换机配置100例