精华内容
下载资源
问答
  • 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 特征重要性选择 / 看所有特征哪个重要

    万次阅读 热门讨论 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'))
    展开全文
  • lightGBM用于排序(Learning to Rank ) 利用lightgbm做learning to rank 排序,主要包括: 数据预处理 模型训练 模型决策可视化 预测 ndcg评估 特征重要度 SHAP特征贡献度解释 样本的叶结点输出 (要求安装lightgbm、...


    向AI转型的程序员都关注了这个号????????????

    机器学习AI算法工程   公众号:datayx

      去年实习时,因为项目需要,接触了一下Learning to Rank(以下简称L2R),感觉很有意思,也有很大的应用价值。L2R将机器学习的技术很好的应用到了排序中,并提出了一些新的理论和算法,不仅有效地解决了排序的问题,其中一些算法(比如LambdaRank)的思想非常新颖,可以在其他领域中进行借鉴。鉴于排序在许多领域中的核心地位,L2R可以被广泛的应用在信息(文档)检索,协同过滤等领域。

      本文将对L2R做一个比较深入的介绍,主要参考了刘铁岩、李航等人的几篇相关文献,我们将围绕以下几点来介绍L2R:现有的排序模型,为什么需要使用机器学习的方法来进行排序,L2R特征的选取,L2R训练数据的获取,L2R训练和测试,L2R算法分类和简介,L2R效果评价等。

    lightGBM用于排序(Learning to Rank )

    利用lightgbm做learning to rank 排序,主要包括:

    • 数据预处理

    • 模型训练

    • 模型决策可视化

    • 预测

    • ndcg评估

    • 特征重要度

    • SHAP特征贡献度解释

    • 样本的叶结点输出

    (要求安装lightgbm、graphviz、shap等)

    代码及运行教程 获取:

    关注微信公众号 datayx  然后回复  排序  即可获取。

    AI项目体验地址 https://loveai.tech

    模型训练

    python lgb_ltr.py -train

    模型决策过程的可视化生成

    可指定树的索引进行可视化生成,便于分析决策过程

    利用SHAP值解析模型中特征重要度

    python lgb_ltr.py -shap

    这里不同于六中特征重要度的计算,而是利用博弈论的方法--SHAP(SHapley Additive exPlanations)来解析模型。利用SHAP可以进行特征总体分析、多维特征交叉分析以及单特征分析等。

    1.总体分析

    2.多维特征交叉分析

    3.单特征分析


    阅读过本文的人还看了以下文章:

    TensorFlow 2.0深度学习案例实战

    基于40万表格数据集TableBank,用MaskRCNN做表格检测

    《基于深度学习的自然语言处理》中/英PDF

    Deep Learning 中文版初版-周志华团队

    【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

    《美团机器学习实践》_美团算法团队.pdf

    《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

    特征提取与图像处理(第二版).pdf

    python就业班学习视频,从入门到实战项目

    2019最新《PyTorch自然语言处理》英、中文版PDF+源码

    《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

    《深度学习之pytorch》pdf+附书源码

    PyTorch深度学习快速实战入门《pytorch-handbook》

    【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

    《Python数据分析与挖掘实战》PDF+完整源码

    汽车行业完整知识图谱项目实战视频(全23课)

    李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

    笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

    《神经网络与深度学习》最新2018版中英PDF+源码

    将机器学习模型部署为REST API

    FashionAI服装属性标签图像识别Top1-5方案分享

    重要开源!CNN-RNN-CTC 实现手写汉字识别

    yolo3 检测出图像中的不规则汉字

    同样是机器学习算法工程师,你的面试为什么过不了?

    前海征信大数据算法:风险概率预测

    【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

    VGG16迁移学习,实现医学图像识别分类工程项目

    特征工程(一)

    特征工程(二) :文本数据的展开、过滤和分块

    特征工程(三):特征缩放,从词袋到 TF-IDF

    特征工程(四): 类别特征

    特征工程(五): PCA 降维

    特征工程(六): 非线性特征提取和模型堆叠

    特征工程(七):图像特征提取和深度学习

    如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

    Machine Learning Yearning 中文翻译稿

    蚂蚁金服2018秋招-算法工程师(共四面)通过

    全球AI挑战-场景分类的比赛源码(多模型融合)

    斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

    python+flask搭建CNN在线识别手写中文网站

    中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

    不断更新资源

    深度学习、机器学习、数据分析、python

     搜索公众号添加: datayx  


    机大数据技术与机器学习工程

     搜索公众号添加: datanlp

    长按图片,识别二维码

    展开全文
  • 在使用GBDT、RF、Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法 一 计算特征重要性方法 首先,目前计算特征重要性计算方法主要有两个方面: ...

    在使用GBDT、RF、Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法

    一 计算特征重要性方法

    首先,目前计算特征重要性计算方法主要有两个方面:

    1.1 训练过程中计算

    训练过程中通过记录特征的分裂总次数、总/平均信息增益来对特征重要性进行量化。例如实际工程中我们会用特征在整个GBDT、XGBoost里面被使用的次数或者带来的总/平均信息增益来给特征重要度打分,最后进行排序。由于本身Ensemble模型在选择特征分裂时带有一定随机性,一般会跑多个模型然后把特征重要性求平均后排序。

    作为单个决策树模型,在模型建立时实际上是寻找到某个特征合适的分割点。这个信息可以作为衡量所有特征重要性的一个指标。

    基本思路如下:
    如果一个特征被选为分割点的次数越多,那么这个特征的重要性就越强。这个理念可以被推广到集成算法中,只要将每棵树的特征重要性进行简单的平均即可。

    分别根据特征1和特征4进行分割,显然x1出现的次数最多,这里不考虑先分割和后分割的情况,只考虑每次分割属性出现的次数。

    计算得:
    x1的特征重要度:出现在2棵树上,两棵树一共分裂了6次,x1出现了3次。
    x1特征重要度 = 3/6 = 1/2
    x2的特征重要度= 4/6 = 2/3
    x3的特征重要度= 3/6 = 1/2


    x4的特征重要度: 出现在1棵树上,一个树分裂了3次,x4出现了1次。
    x4的特征重要度= 1/3

    根据特征重要度进行特征选择。

    1.2 训练后使用OOB(Out of Bag)数据计算

    第二种方式是训练好模型之后,用Out of Bag(或称Test)数据进行特征重要性的量化计算。具体来说,先用训练好的模型对OOB数据进行打分,计算出AUC或其他业务定义的评估指标;接着对OOB数据中的每个特征:

    (1)随机shuffle当前特征的取值;

    (2)重新对当前数据进行打分,计算评估指标;

    (3)计算指标变化率

    按照上面方式,对每个特征都会得到一个变化率,最后按照变化率排序来量化特征重要性。

    延伸到 DNN 对特征重要性判定:

    DNN不像Boosting这类模型那样存在所谓的分裂次数与信息增益,就需要使用第二种方式,对每个特征进行随机shuffle,观察模型指标的变化,最后按照变化率进行排序。比如AUC下滑率,下滑的越多说明当前这个指标越重要。当然,实际操作中需要结合业务经验先指定一个候选变量池,对这部分变量计算重要度,不然计算开销太大。

    二. 树模型特征重要性判定

    2.1 Random Foreast

    • 袋外数据错误率(可参考OOB特征选择方法)
    • 基尼指数(和GBDT的方法相同)

    随机森林特征重要性评定可参考:https://blog.csdn.net/zjuPeco/article/details/77371645?locationNum=7&fps=1

    2.2 GBDT

    基尼指数

    在sklearn中,GBDT和RF的特征重要性计算方法是相同的,都是基于单棵树计算每个特征的重要性,探究每个特征在每棵树上做了多少的贡献,再取个平均值。 


    2.3 XGBoost

    根据结构分数的增益情况计算出来选择哪个特征作为分割点,而某个特征的重要性就是它在所有树中出现的次数之和。也就是说一个属性越多的被用来在模型中构建决策树,它的重要性就相对越高

    xgboost实现中Booster类get_score方法输出特征重要性,其中importance_type参数支持三种特征重要性的计算方法:

    • importance_type=weight(默认):the number of times a feature is used to split the data across all trees. 特征重要性使用特征在所有树中作为划分属性的次数。简单来说,就是在子树模型分裂时,用到的特征次数。这里计算的是所有的树
    • importance_type=gain:is the average gain of splits which use the feature. 特征重要性使用特征在作为划分属性带来的平均增益。特征重要性使用特征在作为划分属性时loss平均的降低量。
    • importance_type=cover:is the average coverage of splits which use the feature where coverage is defined as the number of samples affected by the split. 使用该特作为分割影响的平均样本数。——可以理解为被分到该节点的样本的二阶导数之和,而特征度量的标准就是平均的coverage值。 特征重要性使用特征在作为划分属性时对样本的覆盖度。
    • importance_type=total_gain: the total gain across all splits the feature is used in.
    • importance_type=total_cover: the total coverage across all splits the feature is used in

    使用场景

    weight 将给予数值特征更高的值,因为它的变数越多,树分裂时可切割的空间越大。所以这个指标,会掩盖掉重要的枚举特征。

    gain 用到了熵增的概念,它可以方便的找出最直接的特征。即如果某个特征的下的0,在label下全是0,则这个特征一定会排得靠前。

    cover 对于枚举特征,会更友好。同时,它也没有过度拟合目标函数,不受目标函数的量纲影响。

    举个例子

    我们来做西瓜分类任务。西瓜有颜色、重量、声音、品种、产地等各类特征。其中,生活(业务)经验告诉我们,声音响的瓜甜。我们构建了这么一个模型,判断西瓜甜不甜。输出三类特征重要性。这时会看到一些矛盾的现象3

    在 weight 解释下,声音这类枚举值特征并不会很靠前。反而是重量这类连续特征会靠前。为什么会这样子,是因为连续特征提供了更多的切分状态空间,这样的结果,势必导致它在树模型的分裂点上占据多个位置。与此同时,重要的枚举值特征靠后了。而且我们还能预见的是,同一个量纲下,上下界越大的特征,更有可能靠前。

    如何解决这个矛盾点,那就是采用 gain 或者 cover 方法。因为声音这个特征,必然能带来更多的信息增益,减少系统的熵,所以它在信息增益数值上,一定是一个大值。在树模型的分类节点上,也一定是优先作为分裂点,靠近根部的。

    在实践中,也会发现,gain 排出来的顺序的头尾部值差距较大,这是因为信息增益计算时,后续的优化可能都不是一个量级。类似于神经网络在优化损失函数时,后续的量纲可能是十倍、百倍的差异。所以,综上而言,如果有下游业务方,更建议用 cover 的特征重要性计算方法。当然,如果是单纯的模型调优,gain 能指出最重要的特征。这些特征,某些场景下还能总结成硬规则。

    cover 的解释有点晦涩,在[R-package/man/xgb.plot.tree.Rd]有比较详尽的解释:

    (https://github.com/dmlc/xgboost/blob/f5659e17d5200bd7471a2e735177a81cb8d3012b/R-package/man/xgb.plot.tree.Rd)

    the sum of second order gradient of training data classified to the leaf, if it is square loss, this simply corresponds to the number of instances in that branch. Deeper in the tree a node is, lower this metric will be。实际上coverage可以理解为被分到该节点的样本的二阶导数之和,而特征度量的标准就是平均的coverage值。

    下面就结合这张图,解释下各指标含义: 

    1. weight:  {‘f0’: 1, ‘f1’: 2}
    在所有树中,某特征被用来分裂节点的次数,在本例中,可见分裂第1个节点时用到f0,分裂第2,3个节点时用到f1,所以weight_f0 = 1, weight_f1 = 2


    2. total_cover:  {‘f0’: 10.0, ‘f1’: 8.0}
    第1个节点,f0被用来对所有10个样例进行分裂,之后的节点中f0没再被用到,所以f0的total_cover为10.0,此时f0 >= 0.855563045的样例有5个,落入右子树;
    第2个节点,f1被用来对上面落入右子树的5个样例进行分裂,其中f1 >= -0.178257734的样例有3个,落入右子树;
    第3个节点,f1被用来对上面落入右子树的3个样例进行分裂。
    总结起来,f0在第1个节点分裂了10个样例,所以total_cover_f0 = 10,f1在第2、3个节点分别用于分裂5、3个样例,所以total_cover_f1 = 5 + 3 = 8。total_cover表示在所有树中,某特征在每次分裂节点时处理(覆盖)的所有样例的数量。


    3. cover:  {‘f0’: 10.0, ‘f1’: 4.0}
    cover = total_cover / weight,在本例中,cover_f0 = 10 / 1,cover_f1 = 8 / 2 = 4.


    4. total_gain:  {‘f0’: 0.265151441, ‘f1’: 0.75000003}
    在所有树中,某特征在每次分裂节点时带来的总增益,如果用熵或基尼不纯衡量分裂前后的信息量分别为i0和i1,则增益为(i0 - i1)。


    5. gain:  {‘f0’: 0.265151441, ‘f1’: 0.375000015}

    gain就是特征用于分割的平均增益 ,gain = total_gain / weight,在本例中,gain_f0 = 0.265151441 / 1,gain_f1 = 75000003 / 2 = 375000015.

    在平时的使用中,多用total_gain来对特征重要性进行排序。

    2.4 Lightgbm

    split:result contains numbers of times the feature is used in a mode (特征重要性使用特征在所有树中作为划分属性的次数)
    gain:result contains total gains of splits which use the feature (使用该特征作为分割带来的总增益)


     

    参考文献

    1. 树模型特征重要性评估方法_ep_mashiro的博客-CSDN博客_特征重要性评估
    2. https://blog.csdn.net/lz_peter/article/details/85010931
    展开全文
  • RF,GBDT,XGBoost,lightGBM都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善基本学习器的泛化能力和鲁棒。根据基本学习器的生成方式,目前的集成学习方法大致分为两大...
  • 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'...
  • “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用于排序(Learning to Rank )

    千次阅读 2019-12-10 10:45:00
    也包括文档d和给定查询q之间的相关度,以及文档在整个网络上的重要性(比如PageRank值等),亦即我们可以使用相关性排序模型和重要性排序模型的输出来作为L2R的特征。  1). 传统排序模型的输出,既包括相关性排序...
  • xgb的特征重要性的方式衍生的非常花俏了。 官网上给出的方案,total_gain就是特征带来的总的分裂增益,也就是我们常规意义上的分裂总增益,weight,被用来作为分裂节点的次数,也就是我们常规意义上的分裂总次数,...
  • 在上一篇文章中,我们从整体上介绍了集成方法中Bagging、Boosting和Stacking这三种方式的主要思想,这里我们将介绍其中代表的算法实例:随机森林与以XGBoost/LightGBM为代表的GBDT。随机森林这又是一个名字起得...
  • “weight”通过特征被选中作为分裂特征的计数来计算重要性 “gain”和“total_gain”则通过分别计算特征被选中做分裂特征时带来的平均增益和总增益来计算重要性 “cover”和 “total_cover”通过计算特征被选中做...
  • 问题遇到的现象和发生背景 R语言LightGBM包进行多分类,使用的是tif数据,但是得到的结果非常差,原先使用python实现的时候得到的准确度很正常,R中也不知道是什么原因导致的这种现象。我是先随机选取60个区块的数据...
  • 空气污染是全球最重要的环境问题之一,影响着人们的健康、生产和生活。为了改善空气质量,我国加大监测和环保力度,增加空气质量监测站点,实施蓝天保卫战,并将空气质量水平与污染治理水平纳入部门工作考核。科学...
  • 说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取。 1.项目背景 ...本项目提出一种基于集成学习的房价预测模型:LightGBM回归模...
  • 带你通俗理解LightGBM

    2021-12-07 18:25:54
    GBDT (Gradient Boosting Decision Tree)是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代...LightGBM (Light Gradient Boosting Machine)一个实现GBDT算法的框架,支持高效率的并行训练,
  • 机器学习—LightGBM的原理、优化以及优缺点

    千次阅读 多人点赞 2021-08-11 13:39:34
    文章目录一、LightGBM简介1. LightGBM提出的动机2.XGBoost的缺点...互斥特征捆绑算法4.1 解决哪些特征应该绑在一起4.2 解决怎么把特征绑为一捆三、LightGBM的工程优化1. 直接支持类别特征2. 支持高效并行2.1 特征并行2.
  • LightGBM是GBDT的进化版本,在效率、内存、准确率方面表现优秀。本文讲解LightGBM的动机、优缺点及优化点、决策树算法及生长策略、类别性特征支持、并行支持与优化等重要知识点。
  • LightGBM原理介绍

    千次阅读 2022-03-22 14:21:08
    lightgbm算法原理介绍
  • LightGBM细节技术1. 直方图优化XGBoost缺点LightGBM改进2. 深度限制的节点展开方法3. 直方图做差优化4. 支持类别特征5. 支持并行学习python 实现小结 细节技术 1. 直方图优化 XGBoost缺点 XGBoost是基于预排序方法...
  • lightGBM实战

    千次阅读 2022-01-15 03:57:01
    然后加载预测1.1.3 使用txt和json保存模型并加载1.2使用原生的API进行模型训练和预测1.2.2 使用txt/json格式保存模型1.2.3 使用pickle进行保存模型三、任务3 分类、回归和排序任务3.1使用 make_classification生成二...
  • Lightgbm基本原理介绍

    万次阅读 多人点赞 2018-09-22 22:52:58
    最近在做Kaggle比赛的时候,看到别人的Kenels中都用到了lightgbm,自己也试图用了一下,发现效果很好,最重要的是它相对于XGBoost算法,大大的降低了运行的速度。所以就对Lightgbm的原理探了个究竟,这里就对Light...
  • 深入理解LightGBM

    2022-06-10 00:56:55
    LightGBM简介GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT不仅在工业界...
  • LightGBM算法总结

    万次阅读 多人点赞 2018-08-21 18:39:47
    1 LightGBM原理 1.1 GBDT和 LightGBM对比 ​ GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、...
  • LightGBM

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

    万次阅读 多人点赞 2020-06-13 16:23:23
    1. LightGBM简介 GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT不仅在工业...
  • 打印模型特征重要性

    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 = [...
  • LightGBM 原理、代码最全解读!

    千次阅读 2022-01-21 00:54:12
    来源:Microstrong本文主要内容概览:1. LightGBM简介GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要...
  • LightGBM算法详解

    千次阅读 2021-09-17 20:55:30
    文章目录前言一、LightGBM介绍二、LightGBM的直方图算法(Histogram) 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习...
  • LightGBM详解

    万次阅读 多人点赞 2020-05-20 21:03:00
    文章目录XGBoost不足之处直方图算法单边梯度抽样算法(GOSS)互斥特征捆绑算法(EFB)带深度限制的 Leaf-wise 算法LightGBM的工程优化直接支持类别特征特征并行数据并行投票并行Cache命中率优化LightGBM的优缺点 ...

空空如也

空空如也

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

lightgbm特征重要性排序