面试制胜法宝|实操三大模型算法,這一大特征重要性筛选方法学会了

在建模过程中,为了提高模型训练的学习效率与性能精度,特征筛选是一个必不可少的环节,以银行等金融机构最常用的逻辑回归模型为例,经常采用预测性(IV)、相关性(pearson)、共线性(VIF)等维度来选择合适的特征变量,这对于模型的效果提升有很明显的帮助。但是,针对我们日常经常使用的机器学习树模型来讲,例如决策树、随机森林、GBDT、XGBoost、LightGBM等模型,我们一般都是通过树模型自有的特征重要性系数(feature_importances),来选择对模型贡献度较高的特征变量池,以保证模型训练的性能,这在实际场景应用中也是非常有效的。
特征重要性系数虽然在树模型的训练过程中可以很方便的得到,但是针对这个参数的原理逻辑以及实现方法,在不同类型的树模型中还是有着较明显的区别。本文便给大家介绍下应用较广的几类树模型(随机森林、XGBoost、LightGBM),在特征重要性的实现方面有哪些差异。为了便于全面理解特征重要性系数的原理逻辑,我们围绕具体的样本数据实例来进行分析解读。
首先来简单熟悉下样本数据,共包含3000条样本与8个特征,其中x1~x6为特征变量,flag为目标变量(取值二分类),部分样例如图1所示。根据样本特征的分布情况,下面我们以构建二分类模型为场景需求,依次通过随机森林、XGBoost、LightGBM算法来进行实现,并同步导出要分析的特征重要性系数。这里需要注意的是,特征重要性系数对于树模型的分类或回归场景都可以自动生成。
在这里插入图片描述
图1 样本数据

1、随机森林
随机森林(RandomForest)模型是通过直接调用feature_importances_属性来实现特征的重要性系数,其重要性是根据决策树分割后带来的增益(gain)总和返回的结果,具体实现过程如图2所示。
在这里插入图片描述
图2 随机森林–特征重要性生成

特征变量x1~x6的重要性系数结果如图3所示,由于系数取值越大说明特征对模型的重要性越强,因此从系数分布可知特征x3(0.17489828)相对其他特征更为重要,将其通过可视化图形展现如图4所示。
在这里插入图片描述
图3 随机森林-特征重要性系数

在这里插入图片描述
图4 随机森林-特征重要性分布

2、XGBoost
XGBoost模型与随机森林模型类似,也是通过直接调用feature_importances_属性来输出特征的重要性系数,但是由feature_importances_得到的特征重要性结果与模型参数importance_type(重要性类型)直接相关,而不同importance_type情况的特征重要性系数,由于原理逻辑的不同其结果也有着一定程度的差别。对于重要性类型importance_type,可以有以下5种参数选择:
(1)weight:特征变量选为分裂特征的次数;
(2)gain:特征带来的平均增益,gain=total_gain/weight;
(3)cover:该特征对每棵树的覆盖率;
(4)total_gain:在所有树中特征在每次分裂节点时带来的总增益;
(5)total_cover:在所有树中特征在每次分裂节点时处理的样例数量。

在XGBoost模型训练参数中,若不设置参数importance_type的取值类型,则默认输出的特征重要性按照gain逻辑生成。XGBoost模型训练与特征重要性输出的具体实现过程如图5所示。
在这里插入图片描述
图5 XGBoost-特征重要性生成

此外,XGBoost模型与随机森林模型相比,特征重要性系数除了与模型超参数importance_type直接相关外,算法本身提供了一个可以直接绘制重要性系数分布的可视化函数plot_importance(),这相比采用matplotlib库中的制图工具包pyplot更为方便。图5模型训练得到的特征重要性系数,通过plot_importance()实现结果如图6所示。
在这里插入图片描述
图6 XGBoost-特征重要性分布(type=gain)

为了对比在模型参数importance_type不同取值情况(weight、gain、cover、total_gain、total_cover)的特征重要性系数,我们将其他各种情形结果进行输出,实现过程如图7所示,具体结果如图8、图9所示。
在这里插入图片描述
图7 XGBoost-特征重要性可视化


在这里插入图片描述
图8 XGBoost-特征重要性分布(type=weight/cover)


在这里插入图片描述
图9 XGBoost-特征重要性分(type=total_gain/total_cover)

根据图6、图8、图9的结果可知,由于模型参数importance_type的取值类型不同,对于同一份样本且同一个模型,5种情况下得到的特征重要性系数相对关系有一定差异,其重要性最高的特征分别为x2、x1、x5、x1、x5,而重要性最低的特征分别为x4、x2、x1、x4、x1,显然这样的分布结果对于特征变量的选择也会有所不同,从而对最终的模型也一定程度的性能差别。

3、LightGBM
LightGBM模型相比XGBoost模型,在特征重要性系数实现方式上更为灵活,除了直接采用feature_importances_属性可以获取特征重要性分布,还可以通过调用feature_importances()函数得到同样的结果,相比其他树模型来讲显然更为方便。
LightGBM模型如果采用feature_importances_来输出特征重要性系数,仍然需要模型重要性类型importance_type的参数配置,但这里较为简单的是,LightGBM模型的importance_type只有split与gain这2种情况:
(1)split:特征在所有决策树中分割的次数;
(2)gain:特征在所有决策树中分割后带来的增益总和。

在LightGBM模型训练参数中,若不设置参数importance_type的取值类型,则默认输出的特征重要性按照split逻辑生成。LightGBM模型训练与两种方式下输出特征重要性的具体实现过程如图10所示。
在这里插入图片描述
图10 LightGBM-特征重要性生成

此外,LightGBM模型与XGBoost模型一样,也可以调用函数plot_importance()来实现特征重要性系数的可视化结果。现采用这种方法将2种importance_type取值情况(split、gain)的重要性分布进行展示,具体过程与最终结果分别如图11、图12所示。
在这里插入图片描述
图11 LightGBM-特征重要性可视化

在这里插入图片描述
图12 LightGBM-特征重要性分布(type=split/gain)

由上图结果可以看出,针对同一份建模数据且同一个LightGBM模型,不同importance_type情形下的特征重要性系数相对关系也有所差别,两种取值类型下的重要性系数最高的特征变量分别为x5与x1。
综合以上内容,我们依次通过随机森林、XGBoost、LightGBM三类较为典型的机器学习树模型,实现了在不同参数情形下的特征重要性系数分布。从具体实现过程与最终结果可以得知以下几点:
(1)在模型参数importance_type不同类型的配置情况下,会使特征重要性系数大小的相对关系有一定变化,从而影响到特征变量的选择以及模型训练的效果;
(2)随机森林与XGBoost、LightGBM树模型相比,特征重要性系数的输出不需要importance_type的参与,直接调用feature_importances_属性即可获取;
(3)XGBoost与LightGBM模型的特征重要性分布,直接与importance_type参数配置类型紧密相关;
(4)LightGBM与XGBoost相比,除了通过调用feature_importances_属性获取特征重要性系数,还可以采用feature_importances()函数得到同样的结果;
(5)XGBoost与LightGBM模型都可以通过plot_importance()函数直接获取特征变量重要性系数的可视化分布;
(6)XGBoost与LightGBM模型在参数importance_type选择的实际场景中,可以尝试不同importance_type情况下的特征重要性系数结果,并结合数据与模型情况,对比参考更合适的特征重要性系数分布,从而选择更有效的特征变量。
为了便于大家对本文关于机器学习树模型特征重要性系数feature_importances多样化实现的进一步理解与熟悉,我们准备了与以上内容同步的样本数据与python代码,供大家参考学习,详情请移至知识星球参考相关内容。
由上图结果可以看出,针对同一份建模数据且同一个LightGBM模型,不同importance_type情形下的特征重要性系数相对关系也有所差别,两种取值类型下的重要性系数最高的特征变量分别为x5与x1。
综合以上内容,我们依次通过随机森林、XGBoost、LightGBM三类较为典型的机器学习树模型,实现了在不同参数情形下的特征重要性系数分布。从具体实现过程与最终结果可以得知以下几点:
(1)在模型参数importance_type不同类型的配置情况下,会使特征重要性系数大小的相对关系有一定变化,从而影响到特征变量的选择以及模型训练的效果;
(2)随机森林与XGBoost、LightGBM树模型相比,特征重要性系数的输出不需要importance_type的参与,直接调用feature_importances_属性即可获取;
(3)XGBoost与LightGBM模型的特征重要性分布,直接与importance_type参数配置类型紧密相关;
(4)LightGBM与XGBoost相比,除了通过调用feature_importances_属性获取特征重要性系数,还可以采用feature_importances()函数得到同样的结果;
(5)XGBoost与LightGBM模型都可以通过plot_importance()函数直接获取特征变量重要性系数的可视化分布;(6)XGBoost与LightGBM模型在参数importance_type选择的实际场景中,可以尝试不同importance_type情况下的特征重要性系数结果,并结合数据与模型情况,对比参考更合适的特征重要性系数分布,从而选择更有效的特征变量。
为了便于大家对本文关于机器学习树模型特征重要性系数feature_importances多样化实现的进一步理解与熟悉,我们准备了与以上内容同步的样本数据与python代码,供大家参考学习,详情请移至知识星球参考相关内容。
在这里插入图片描述

~原创文章

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值