精华内容
下载资源
问答
  • 画出lightGBM特征重要性并排序
    千次阅读
    2022-02-11 17:52:24
    df = pd.DataFrame()
    df['feature name'] = data_df.drop(["label"], axis=1).columns  #data_df为特征数据集
    df['importance'] = clf.feature_importance()
    df.sort_values(by='importance',inplace=True, ascending=False)
    
    df2 = df.head(50)
    df2.plot.barh(x = 'feature name',figsize=(10,12))

    更多相关内容
  • LightGBM特征重要性画图

    千次阅读 2021-04-01 10:10:49
    资料参考: 1. Evaluate Feature Importance using Tree-based Model 2. lgbm.fi.plot: LightGBM Feature Importance Plotting 3. lightgbm官方文档 前言 基于树...

    转载于:https://blog.csdn.net/m0_37477175/article/details/80567010

    资料参考:
    1. Evaluate Feature Importance using Tree-based Model
    2. lgbm.fi.plot: LightGBM Feature Importance Plotting
    3. lightgbm官方文档

    前言

    基于树的模型可以用来评估特征的重要性。 在本博客中,我将使用LightGBM中的GBDT模型来评估特性重要性的步骤。 LightGBM是由微软发布的高精度和高速度梯度增强框架(一些测试表明LightGBM可以产生与XGBoost一样的准确预测,但速度可以提高25倍)。

    首先,我们导入所需的软件包:用于数据预处理的pandas,用于GBDT模型的LightGBM以及用于构建功能重要性条形图的matplotlib。

    import pandas as pd
    import matplotlib.pylab as plt
    import lightgbm as lgb
       
    • 1
    • 2
    • 3

    然后,我们需要加载和预处理训练数据。 在这个例子中,我们使用预测性维护数据集。

    # read data
    train = pd.read_csv('E:\Data\predicitivemaintance_processed.csv')
    

    # drop the columns that are not used for the model
    train = train.drop([‘Date’, ‘FailureDate’],axis=1)

    # set the target column
    target = ‘FailNextWeek’

    # One-hot encoding
    feature_categorical = [‘Model’]
    train = pd.get_dummies(train, columns=feature_categorical)

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    接下来,我们用训练数据训练GBDT模型:

    lgb_params = {
        'boosting_type': 'gbdt',
        'objective': 'binary',
        'num_leaves': 30,
        'num_round': 360,
        'max_depth':8,
        'learning_rate': 0.01,
        'feature_fraction': 0.5,
        'bagging_fraction': 0.8,
        'bagging_freq': 12
    }
    lgb_train = lgb.Dataset(train.drop(target, 1), train[target])
    model = lgb.train(lgb_params, lgb_train)
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    模型训练完成后,我们可以调用训练模型的plot_importance函数来获取特征的重要性。

    plt.figure(figsize=(12,6))
    lgb.plot_importance(model, max_num_features=30)
    plt.title("Featurertances")
    plt.show()
     
    • 1
    • 2
    • 3
    • 4

    这里写图片描述

    保存feature importance

    booster = model.booster_
    importance = booster.feature_importance(importance_type='split')
    feature_name = booster.feature_name()
    # for (feature_name,importance) in zip(feature_name,importance):
    #     print (feature_name,importance) 
    feature_importance = pd.DataFrame({
      'feature_name':feature_name,'importance':importance} )
    feature_importance.to_csv('feature_importance.csv',index=False)
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    展开全文
  • lightgbm 特征重要性选择 / 看所有特征哪个重要

    万次阅读 热门讨论 2018-06-05 11:43:13
    print(pd.DataFrame({ 'column': feature_names, 'importance': lgb_trained_model.feature_importance(), }).sort_values(by='importance'))
    print(pd.DataFrame({
            'column': feature_names,
            'importance': lgb_trained_model.feature_importance(),
        }).sort_values(by='importance'))
    展开全文
  • RF,GBDT,XGBoost,lightGBM都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善基本学习器的泛化能力和鲁棒。根据基本学习器的生成方式,目前的集成学习方法大致分为两大...

    26b394284b03054b2a6c6cd7c6ca2f55.png

    RF,GBDT,XGBoost,lightGBM都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善基本学习器的泛化能力和鲁棒性。

    根据基本学习器的生成方式,目前的集成学习方法大致分为两大类:即基本学习器之间存在强依赖关系、必须串行生成的序列化方法,以及基本学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表就是Boosting,后者的代表是Bagging和“随机森林”(Random Forest)

    这篇文章主要对集成学习中重要的、使用广泛的方法进行对比:

    RF(随机森林)), GBDT(梯度提升决策树), XGBoost, lightGBM

    随机森林 -- RandomForest

    提到随机森林,就不得不提Bagging,Bagging可以简单的理解为:放回抽样,多数表决(分类)或简单平均(回归),同时Bagging的基学习器之间属于并列生成,不存在强依赖关系。

      Random Forest(随机森林)是Bagging的扩展变体,它在以决策树 为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机特征选择

    因此可以概括RF包括四个部分:

    1、随机选择样本(放回抽样);

    2、随机选择特征属性;

    3、构建决策树;

    4、随机森林投票(平均) 因此防止过拟合能力更强,降低方差。

    RF和Bagging对比: RF的起始性能较差,特别当只有一个基学习器时,随着学习器数目增多,随机森林通常会收敛到更低的泛化误差。随机森林的训练效率也会高于Bagging,因为在单个决策树的构建中,Bagging使用的是‘确定性’决策树,在选择特征划分结点时,要对所有的特征进行考虑,而随机森林使用的是‘随机性’特征数,只需考虑特征的子集。

    使用的融合方法:bagging

    一种集成学习算法,基于bootstrap sampling 自助采样法,重复性有放回的随机采用部分样本进行训练最后再将结果 voting 或者 averaging 。

    它是并行式算法,因为不同基学习器是独立

    训练一个bagging集成学习器时间复杂度与基学习器同阶(n倍,n为基学习器个数)。

    bagging可以用于二分类/多分类/回归

    每个基学习器的未用作训练样本可用来做包外估计,评价泛化性能。

    bagging主要关注降低 方差。

    两个步骤 1. 抽样训练(采样样本,采样特征) 2 融合

    随机森林的优缺点

    优点:

    a)随机森林算法能解决分类与回归两种类型的问题,表现良好,由于是集成学习,方差和偏差都比较低,泛化性能优越;

    b)随机森林对于高维数据集的处理能力很好,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出特征的重要性程度,这是一个非常实用的功能。

    c) 可以应对缺失数据;

    d)当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法;

    e ) 高度并行化,易于分布式实现

    f) 由于是树模型 ,不需要归一化即可之间使用

    缺点:

    随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。

    对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子——你几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。

    忽略属性之间的相关性

    在噪声较大的分类或者回归问题上容易过拟合。

    GBDT (Gradient Boosting Decision Tree)

    提GBDT之前,谈一下Boosting,Boosting是一种与Bagging很类似的技术。不论是Boosting还是Bagging,所使用的多个分类器类型都是一致的。但是在前者当中,不同的分类器是通过串行训练而获得的,每个新分类器都根据已训练的分类器的性能来进行训练。Boosting是通过关注被已有分类器错分的那些数据来获得新的分类器。

      由于Boosting分类的结果是基于所有分类器的加权求和结果的,因此Boosting与Bagging不太一样,Bagging中的分类器权值是一样的,而Boosting中的分类器权重并不相等,每个权重代表对应的分类器在上一轮迭代中的成功度。

    原理

    GBDT的基本原理是boost 里面的 boosting tree(提升树),并使用 gradient boost。

    GradientBoosting算法关键是利用损失函数的负梯度方向在当前模型的值作为残差的近似值,进而拟合一棵CART回归树。

    GBDT会累加所有树的结果,而这种累加是无法通过分类完成的,因此GBDT的树都是CART回归树,而不是分类树(尽管GBDT调整后也可以用于分类但不代表GBDT的树为分类树) 因为Gradient Boosting 需要按照损失函数的梯度近似的拟合残差,这样拟合的是连续数值,因此只有回归树。

    梯度提升 Gradient Boosting:

    Gradient Boosting是一种Boosting的方法,其与传统的Boosting的区别是,每一次的计算是为了减少上一次的残差(residual),而为了消除残差,可以在残差减少的梯度(Gradient)方向上建立一个新的模型。所以说,在Gradient Boosting中,每个新的模型的建立是为了使得之前模型的残差往梯度方向减少,与传统Boosting对正确、错误样本进行加权有着很大的区别。这个梯度代表上一轮学习器损失函数对预测值求导。

    与Boosting Tree的区别:Boosting Tree适合于损失函数为平方损失或者指数损失。而Gradient Boosting适合各类损失函数(损失函数为平方损失则相当于Boosting Tree拟合残差、损失函数为指数损失则可以近似于Adaboost,但树是回归树)

    优缺点

      优点:GBDT的性能在RF的基础上又有一步提升,因此其优点也很明显,1、它能灵活的处理各种类型的数据;2、在相对较少的调参时间下,预测的准确度较高。

      缺点:当然由于它是Boosting,因此基学习器之前存在串行关系,难以并行训练数据。

    XGBoost原理

    XGBoost的原理详细,推荐两篇大神博客, xgboost原理 ,xgboost 算法原理。

    XGBoost是集成学习Boosting家族的成员,是在GBDT的基础上对boosting算法进行的改进。GBDT是用模型在数据上的负梯度作为残差的近似值,从而拟合残差。XGBoost也是拟合的在数据上的残差,但是它是用泰勒展开式对模型损失残差的近似;同时XGBoost对模型的损失函数进行的改进,并加入了模型复杂度的正则项。

      XGBoost的性能在GBDT上又有一步提升,而其性能也能通过各种比赛管窥一二。坊间对XGBoost最大的认知在于其能够自动地运用CPU的多线程进行并行计算,同时在算法精度上也进行了精度的提高。由于GBDT在合理的参数设置下,往往要生成一定数量的树才能达到令人满意的准确率,在数据集较复杂时,模型可能需要几千次迭代运算。但是XGBoost利用并行的CPU更好的解决了这个问题。

    XGBoost与GBDT的区别: 在了解了XGBoost原理后容易理解二者的不同

    损失函数的改变:(导数和正则项的认识)

    传统的GBDT以CART树作为基学习器,XGBoost还支持线性分类器,这个时候XGBoost相当于L1和L2正则化的逻辑斯蒂回归(分类)或者线性回归(回归);

    传统的GBDT在优化的时候只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,得到一阶和二阶导数;

    XGBoost在代价函数中加入了正则项,用于控制模型的复杂度。从权衡方差偏差来看,它降低了模型的方差,使学习出来的模型更加简单,防止过拟合,这也是XGBoost优于传统GBDT的一个特性;

    工具的优化:(趋势值和并行的认识)

    shrinkage(缩减),相当于学习速率(XGBoost中的eta)。XGBoost在进行完一次迭代时,会将叶子节点的权值乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。(GBDT也有学习速率);

    列抽样。XGBoost借鉴了随机森林的做法,支持列抽样,不仅防止过 拟合,还能减少计算;

    对缺失值的处理。对于特征的值有缺失的样本,XGBoost还可以自动学习出它的分裂方向;

    XGBoost工具支持并行。Boosting不是一种串行的结构吗?怎么并行的?注意XGBoost的并行不是tree粒度的并行,XGBoost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。XGBoost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代 中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

    缺点

      1、level-wise 建树方式对当前层的所有叶子节点一视同仁,有些叶子节点分裂收益非常小,对结果没影响,但还是要分裂,加重了计算代价。

      2、预排序方法空间消耗比较大,不仅要保存特征值,也要保存特征的排序索引,同时时间消耗也大,在遍历每个分裂点时都要计算分裂增益(不过这个缺点可以被近似算法所克服)

    lightGBM

    它是微软出的新的boosting框架,基本原理与XGBoost一样,只是在框架上做了一优化(重点在模型的训练速度的优化)。

    关于lightGBM的介绍参考:比XGBOOST更快–LightGBM介绍

    与XGboost对比

      1、xgboost采用的是level-wise的分裂策略,而lightGBM采用了leaf-wise的策略,区别是xgboost对每一层所有节点做无差别分裂,可能有些节点的增益非常小,对结果影响不大,但是xgboost也进行了分裂,带来了务必要的开销。 leaft-wise的做法是在当前所有叶子节点中选择分裂收益最大的节点进行分裂,如此递归进行,很明显leaf-wise这种做法容易过拟合,因为容易陷入比较高的深度中,因此需要对最大深度做限制,从而避免过拟合。

      2、lightgbm使用了基于histogram的决策树算法,这一点不同与xgboost中的 exact 算法(tree_method 可以使用 hist参数),histogram算法在内存和计算代价上都有不小优势。

      (1)内存上优势:很明显,直方图算法的内存消耗为(#data* #features * 1Bytes)(因为对特征分桶后只需保存特征离散化之后的值),而xgboost的exact算法内存消耗为:(2 * #data * #features* 4Bytes),因为xgboost既要保存原始feature的值,也要保存这个值的顺序索引,这些值需要32位的浮点数来保存。

      (2)计算上的优势,预排序算法在选择好分裂特征计算分裂收益时需要遍历所有样本的特征值,时间为(#data),而直方图算法只需要遍历桶就行了,时间为(#bin)

      3、直方图做差加速

    一个子节点的直方图可以通过父节点的直方图减去兄弟节点的直方图得到,从而加速计算。

      4、lightgbm支持直接输入categorical 的feature

    在对离散特征分裂时,每个取值都当作一个桶,分裂时的增益算的是”是否属于某个category“的gain。类似于one-hot编码。

      5、多线程优化

    lightgbm哪些方面做了并行?

    -. feature parallel

    一般的feature parallel就是对数据做垂直分割(partiion data vertically,就是对属性分割),然后将分割后的数据分散到各个worker上,各个workers计算其拥有的数据的best splits point, 之后再汇总得到全局最优分割点。但是lightgbm说这种方法通讯开销比较大,lightgbm的做法是每个worker都拥有所有数据,再分割?(没懂,既然每个worker都有所有数据了,再汇总有什么意义?这个并行体现在哪里??)

    -. data parallel

    传统的data parallel是将对数据集进行划分,也叫 平行分割(partion data horizontally), 分散到各个workers上之后,workers对得到的数据做直方图,汇总各个workers的直方图得到全局的直方图。 lightgbm也claim这个操作的通讯开销较大,lightgbm的做法是使用”Reduce Scatter“机制,不汇总所有直方图,只汇总不同worker的不同feature的直方图(原理?),在这个汇总的直方图上做split,最后同步。

    展开全文
  • lightGBM用于排序(Learning to Rank ) 利用lightgbm做learning to rank 排序,主要包括: 数据预处理 模型训练 模型决策可视化 预测 ndcg评估 特征重要度 SHAP特征贡献度解释 样本的叶结点输出 (要求安装lightgbm、...
  • “weight”通过特征被选中作为分裂特征的计数来计算重要性 “gain”和“total_gain”则通过分别计算特征被选中做分裂特征时带来的平均增益和总增益来计算重要性 “cover”和 “total_cover”通过计算特征被选中做...
  • //排序取前百分之 val filteredTuples = vecCols.zip(importanceValues).sortWith(_._2 > _._2) .take((0.6 * vecCols.size).intValue()) //生成重要性df var index = 0 val importanceRDD: Array...
  • LightGBM算法详解(教你一文掌握LightGBM所有知识点)

    万次阅读 多人点赞 2020-03-10 19:28:11
    LigthGBM是boosting集合模型中的新进成员,由微软...LightGBM在很多方面会比XGBoost表现的更为优秀。它有以下优势: 更快的训练效率 低内存使用 更高的准确率 支持并行化学习 可处理大规模数据 支持直接使用catego...
  • LightGBM.feature_importance()

    千次阅读 2021-06-15 17:09:14
    使用LightGBM.feature_importance()函数给训练完毕的LightGBM模型的各特征进行重要性排序。 feature_importance = pd.DataFrame() feature_importance['fea_name'] = train_features feature_importance['fea_imp'...
  • lightGBM主要原理及其python实现1主要原理1.1GOSS,基于梯度的单边采样1.2EFB,互斥特征绑定1.3Leaf-wise的决策树生长策略1.4类别特征的处理2总结3.python实现 前言:lightGBM主要流程和XgBoost比较相似,都是GBDT的...
  • 说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取。 1.项目背景 ...本项目提出一种基于集成学习的房价预测模型:LightGBM回归模...
  • 结果2.1 准确率2.2 训练时间和预测时间2.3 可解释性2.3.1 特征重要性2.3.2 SHAP值2.3.3 可视化二叉树3. 总结4. 代码参考文献 1. 对比标准 1.1 数据集 分类:Fashion MNIST(60000条数据784个特征) 回归:NYC Taxi ...
  • mac:jupyter notebook使用lightgbm

    千次阅读 2018-09-18 14:49:20
    最近习惯了用jupyter notebook做比赛,但是使用lightgbm这种模块的时候,报错说“找不到相关模块”,于是各种谷歌百度,最终解决了这个问题,下面和大家分享一下,也给自己做一下笔记。 1.lightgbm的安装教程在前一...
  • 在复习特征重要性时候,考虑到我们在使用GBDT ,RF,Xgboost 等树类模型建模时,往往可以通过feature_importance 来返回特征重要性,一下是各模型输出特征重要性的原理和方法。 1 计算特征重要性方法 1-1 训练过程...
  • 在使用GBDT、RF、Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法 一 计算特征重要性方法 首先,目前计算特征重要性计算方法主要有两个方面: ...
  • LightGBM调参

    千次阅读 2019-11-24 16:48:30
    GBDT模型的另一个进化版本:LightGBM。LigthGBM是boosting集合模型中的新进成员,由微软提供,它和XGBoost一样是对GBDT的高效实现,原理上它和GBDT及XGBoost类似,都采用损失函数的负梯度作为当前决策树的残差近似值...
  • 树类算法之---lightGBM使用与调参

    千次阅读 2019-04-23 16:34:15
    lightGBM是一个基于树模型的分布式Boosting算法,该算法是有微软开源贡献,说到tree-based模型一般都会想到XGBOOST算法,毕竟也是曾经的大杀器,那下面就把这两个算法进行一些对比。 2.Xgboost的优缺点 优点:(不...
  • 之前写过一篇参加这个比赛过程中用xgboost的调参的文章,今天再记录一下用lightGBM作为特征筛选模型以及训练数据的过程 1.数据准备 新网的这个比赛主办方总共提供了三个数据集,命名分别为 train_xy.csv:15000条...
  • 文章目录一、LightGBM简介1. LightGBM提出的动机2.XGBoost的缺点...互斥特征捆绑算法4.1 解决哪些特征应该绑在一起4.2 解决怎么把特征绑为一捆三、LightGBM的工程优化1. 直接支持类别特征2. 支持高效并行2.1 特征并行2.
  • LightGBM详细

    2021-12-17 11:20:42
    LightGBM GBDT是一个长久不衰的模型,他的思想是什么? 它的思想就是将多个弱分类器迭代训练得到最优的模型,训练效果好,不易过拟合等等的有点,那么XGB就是典型的一个GBDT的实现。 首先回顾一下XGB,它的...
  • LightGBM细节技术1. 直方图优化XGBoost缺点LightGBM改进2. 深度限制的节点展开方法3. 直方图做差优化4. 支持类别特征5. 支持并行学习python 实现小结 细节技术 1. 直方图优化 XGBoost缺点 XGBoost是基于预排序方法...
  • LightGBM原理解读及核心参数解释

    千次阅读 2019-03-14 11:16:57
    在笔者看来,LightGBM的改进大部分是基于计算、运行效率上的改进,使GBDT类模型的性能更快,LGB主要针对数据并行和特征并行进行了优化,大大提升了模型的效率。下面就来意义解读。 传统GBDT方法的缺点 传...
  • 之前的一篇跟LightGBM相关的文章:python - 机器学习lightgbm相关实践 这里可以直接跑通的github:wangru8080/gbdt-lr 1 GBDT + LR原理 参考:GBDT+LR算法解析及Python实现 1.1 CTR常见流程 GBDT+LR 使用最广泛的...
  • LightGBM原理介绍

    2022-03-22 14:21:08
    lightgbm算法原理介绍
  • 打印模型特征重要性

    2020-12-29 14:09:36
    1. 获得特征重要性信息 def get_feature_importance_pair(gbm_model): feature_name_list = gbm_model.feature_name() importance_list = list(gbm_model.feature_importance()) feature_importance_pair = [...
  • XGBoost和lightGBM笔记

    2021-03-17 09:26:48
    1.XGBoost 模型 假设一共K棵树,那么 fk(xi)f_{k}(x_{i})fk​(xi​)表示第i个样本在第k棵树中落在叶子节点的权重。 训练时候的目标函数 ...定义树的复杂度:用叶子的个数和叶子权重的平滑程度来...对于某个特征,先按
  • lightGBM中的lightgbm.train

    千次阅读 2022-03-11 15:30:54
    lightgbm.train2.返回 lightgbm.Boostermethods 1. lightgbm.train lightgbm.train(params, train_set, num_boost_round=100, valid_sets=None, valid_names=None, fobj=None, feval=None, init_model=None, ...
  • 基于LightGBM的分类预测

    千次阅读 2021-04-16 23:05:14
    一、学习知识点概要 1.1 LightGBM的介绍 1). 2017年经微软推出,XGBoost的升级版 ... 分类特征: XGBoost不支持类别特征,需要对其进行onehot编码,而LightGBM支持类别特征 LightGBM的主要优点: 1.简单易用。提
  • LightGBM

    2021-03-24 17:53:12
    文章目录LightGBMLigthGBM与XGBoost异同点LightGBM训练快和内存消耗小的原因LGBMClassifier参数泰坦尼克号乘客生存率分析模型训练特征重要性混淆矩阵交叉验证TopN网格搜索最佳参数Mnist 手写数字识别多分类评估 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,516
精华内容 1,406
关键字:

lightgbm特征重要性

友情链接: LL(1)预测分析法.zip