LightGBM模型,python lightGBM模型调用

  LightGBM模型,python lightGBM模型调用

  lightGBM模型1简介。lightGBM模型简介Lightgbm模型是梯度提升决策树(GBDT)的一种实现,其本质原理是训练和整合基分类器(决策树)以获得最优模型。同样的模型也有XGBoost,但是由于XGBoost模型在多维大数据集下的计算效率和可扩展性较差(主要原因是对于每个特征,他们都要扫描所有数据样本来评估所有可能分支的信息增益),lightGBM模型为解决这个问题提出了两种技术:基于梯度的单侧采样(GOSS)和独占特征捆绑(EFB)。

  2.LightGBM模型基本原理的直方图算法

  梯度提升决策树(GBDT)训练最大的消耗就是寻找最佳分支点。预排序算法是寻找分支点最流行的算法之一。它遍历预先排序的特征值中所有可能的分支点。这种方法非常简单,可以找到最佳分支点,但需要大量的时间和内存。另一种寻找最佳分支点的常用算法是直方图算法。该算法将特征的连续值分成离散的箱(盒),并在训练期间使用箱来构建特征直方图。lightGBM模型还加速了直方图算法。一片叶子的直方图可以通过它的父节点的直方图和它的兄弟的直方图之差得到,速度可以翻倍。通常,在构造直方图时,需要遍历叶子上的所有数据,但只需要遍历直方图的k个桶就可以产生差异。在实际的建树过程中,LightGBM还可以先计算出直方图小的叶子节点,然后利用直方图的差异来获得直方图大的叶子节点,这样就可以用很小的代价获得其兄弟叶子的直方图。

  直方图伪代码:

  带深度限制的逐叶算法

  在直方图算法之上,lightGBM模型还优化了树的生长策略。首先,它放弃了大多数GBDT工具所使用的逐层决策树生长策略,而使用具有深度限制的逐叶算法。与Level-wise相比,Leaf-wise的优点是在分裂次数相同的情况下,Leaf-wise可以减少更多的误差,获得更好的精度;叶子方式的缺点是,它可能会生成深度决策树,并产生过拟合。所以LightGBM会在Leaf-wise上增加一个最大深度限制,既能保证高效率,又能防止过拟合。

  单边梯度采样算法

  在梯度提升决策树(GBDT)中,数据样本起初没有初始权重。然而,在计算信息增益时,不同梯度的样本的重要性是不同的。根据信息增益的定义,梯度越大,贡献越大。所以lightGBM模型在计算训练时的信息增益时会保留梯度大的样本,随机抽取一些梯度小的样本(这样可以保持原始的数据分布)。这比相同采样率的随机采样更准确。

  为了减少采样对数据分布的影响,GOSS为小梯度数据样本引入了常数乘数。具体操作是先按照梯度的绝对值对样本进行排序,然后选择第一个A样本,再从剩下的样本中随机选择B样本。然后,在计算信息增益时,使用常数1-a/b来放置大小梯度的样本。

  单边梯度采样算法的伪代码:

  互斥绑定算法

  高维数据往往是稀疏的,特征空间的稀疏性为设计无损方式减少特征数量提供了可能。具体来说,在稀疏特征空间中,很多特征是互斥的(即不会同时取非零值)。因此,我们可以安全地绑定互斥功能。通过设置特征扫描算法,我们可以用捆绑特征构建与单个特征相同的直方图。并且构造直方图的复杂度从O(#data*#feature)降低到O(#data*#bundle)。如何决定将哪些功能捆绑在一起

  寻找最优绑定策略是一个NP-hard问题。这意味着我们无法在有限的时间内找到最优解。因此,为了寻找近似最优解,我们将最优绑定问题转化为图着色问题,将每个特征作为一个节点,用边连接互斥的节点。然后用贪心算法求解。然而,我们发现许多特性很少同时取非零值,即使它们不是100%互斥的。如果算法运行少量的特征冲突,可以得到更少的特征束,计算效率更高。这种方法对精度影响很小。

  算法的伪代码:

  怎么绑定?

  为了降低训练复杂度,我们需要一个好的方法将这些特征组合到同一个包中。关键是确保原始特性的值可以从合并的包中识别出来。因为直方图算法用离散的箱代替了特征的连续值。让我们将互斥的特性分布到不同的bin中来构建bundles。这可以通过在特征值上增加一个偏移常数来解决。例如,我们将两个特性A和B捆绑在一起。特征A的原始值是区间[0,10],特征B的原始值是区间[0,20]。我们可以在特征B的值上加一个偏移常数10,将其取值范围改为[10,30],特征的有界取值范围为[0,30]。

  算法伪代码:

  二、lightGBM模式的优缺点:

  训练中采用直方图算法寻找最佳分支点,提高了训练速度。单边梯度采样算法用于减少计算量。采用逐叶算法的生长策略构建决策树,减少了不必要的计算。减少了内存消耗。缺点:

  使用逐叶算法可能会形成更深的决策树,从而导致过拟合。三。lightGBM模型的参数lightGBM模型的参数有很多。这里只介绍一些核心参数。详见官网。

  描述带参数的目标模型的应用类型,如回归、二分类、多分类、交叉熵、排序等。其参数值可以是回归、二元、多类、 cross_entropy 、 lambdarank 等助推森林构建策略,其参数值可以是 gbdt :传统的梯度提升决策树;“rf”:随机森林;“dart”:带丢失的梯度提升决策树;Goss:单侧梯度采样策略数据(train_data)训练数据有效(valid_data)验证数据num_iterationsboosting迭代次数learning_rate学习速率num_leaves树叶节点max_depth树最大深度,可以控制过拟合min_data_in_leaf的一个叶节点中的最小样本数,通常用于处理过拟合feature_fractionlightGBM模型训练时每次迭代选择特征的比例。默认值为1,这意味着在每次迭代中选择所有特征。设置为0.8表示随机选择80%的特征进行训练。is _不平衡样本标签分布均匀?四。lightGBM模型应用import numpy as NP import pandas as PD import light GBM as LGB # Get data train _ data=PD . read _ CSV(r 。/train _ data.csv ,index _ col=0) x=train _ data.iloc [:1:] y=train _ data.iloc [:0] #划分训练集和测试集x _ train。Y _ test=train _ test _ split (x,y,test _ size=0.3,random _ state=420) #转换成数据集数据格式train_set=lgb。Dataset(X_train,Label=y _ train)vali _ set=lgb . dataset(X _ test,Label=y _ test)# params={ learning _ rate :0.03, num _ leaves: 512,#叶节点数 metric: {L2 ,#评估函数 objective: regression ,#目标函数 boosting: dart ,# rf:随机森林dart:gbdt scale _ pos _ weight with dropout:96, bagging _ fraction: 0.8,Bagging _ freq: 5, min _ data _ in _ leaf: 100} #模型训练GBM=lgb.train (params,train _ set,valid _ sets=[valid _ set],Num_boost_round=250)#预测数据集y _ pred=gbm.predict (x _ test,Num/model.txt )

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: