我们在构建树类模型(XGBoost、LightGBM等)时,如果想要知道哪些变量比较重要的话。可以通过模型的feature_importances_

方法来获取特征重要性。例如LightGBM的feature_importances_可以通过特征的分裂次数或利用该特征分裂后的增益来衡量。一般情况下,不同的衡量准则得到的特征重要性顺序会有差异。我一般是通过多种评价标准来交叉选择特征。博主认为,若一个特征在不同的评价标准下都是比较重要的,那么该特征对label有较好的预测能力。

为大家介绍一种评价特征重要性的方法:PermutationImportance

。文档对该方法介绍如下:*eli5 provides a way to compute feature importances for any black-box estimator by measuring how score decreases when a feature is not available; the method is also known as “permutation importance” or “Mean Decrease Accuracy (MDA)”.*我的理解是:若将一个特征置为随机数,模型效果下降很多,说明该特征比较重要;反之则不是。

下面为大家举一个简单的例子,我们利用不同模型来挑选变量(RF、LightGBM、LR)。并挑选出来重要性排在前30的变量(总变量200+)进行建模。

import eli5
from eli5.sklearn import PermutationImportance
from sklearn.feature_selection import SelectFromModeldef PermutationImportance_(clf,X_train,y_train,X_valid,X_test):perm = PermutationImportance(clf, n_iter=5, random_state=1024, cv=5)perm.fit(X_train, y_train)    result_ = {'var':X_train.columns.values,'feature_importances_':perm.feature_importances_,'feature_importances_std_':perm.feature_importances_std_}feature_importances_ = pd.DataFrame(result_, columns=['var','feature_importances_','feature_importances_std_'])feature_importances_ = feature_importances_.sort_values('feature_importances_',ascending=False)#eli5.show_weights(perm, feature_names=X_train.columns.tolist(), top=500) #结果可视化   sel = SelectFromModel(perm, threshold=0.00, prefit=True)X_train_ = sel.transform(X_train)X_valid_ = sel.transform(X_valid)X_test_ = sel.transform(X_test)return feature_importances_,X_train_,X_valid_,X_test#PermutationImportance
model_1 = RandomForestClassifier(random_state=1024)
feature_importances_1,X_train_1,X_valid_1,X_test_1 = PermutationImportance_(model_1,X_train,y_train,X_valid,X_test)model_2 = lgb.LGBMClassifier(objective='binary',random_state=1024)
feature_importances_2,X_train_2,X_valid_2,X_test_2 = PermutationImportance_(model_2,X_train,y_train,X_valid,X_test)model_3 = LogisticRegression(random_state=1024)
feature_importances_3,X_train_3,X_valid_3,X_test_3 = PermutationImportance_(model_3,X_train,y_train,X_valid,X_test

建模特征分别为:全部特征、RF前30特征、LightGBM前30特征、LR前30特征。可以看到LightGBM通过PermutationImportance选出来的30个特征的模型的泛化性要好于用全部变量建模。

train auc: 0.737572501101 valid auc: 0.707917079532 test auc: 0.698453842775
train auc: 0.728547026706 valid auc: 0.694552089056 test auc: 0.674431794411
train auc: 0.737740963444 valid auc: 0.711832783676 test auc: 0.702665571919
train auc: 0.721754352344 valid auc: 0.694629157213 test auc: 0.679796146766

官方文档:

https://eli5.readthedocs.io/en/latest/blackbox/permutation_importance.html

PermutationImportance相关推荐

  1. 利用PermutationImportance挑选变量

    我们在构建树类模型(XGBoost.LightGBM等)时,如果想要知道哪些变量比较重要的话.可以通过模型的feature_importances_方法来获取特征重要性.例如LightGBM的feat ...

  2. kaggle项目:基于随机森林模型的心脏病患者预测分类!

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 新年的第一个项目实践~给大家分享一个新的kaggle案例:基于随机森林模型(RandomForest)的心脏病人预测分类 ...

  3. 哪些特征对我的机器学习模型影响最大?

    哪些特征对我的机器学习模型影响最大? http://blog.sina.com.cn/s/blog_cfa68e330102zelh.html 测量特征重要性没有灵丹妙药,排列重要性是常用的方法之一. ...

  4. 为什么要假设变量为正态分布?

    为什么要假设变量为正态分布? enhengz关注赞赏支持 为什么要假设变量为正态分布? 正态分布概念: 参见上篇简文中心极限定理与正态分布 好,进入本文重点,为什么很多模型都假设变量服从正态分布呢,尤 ...

  5. kaggle-Santander 客户交易预测总结

    1 绘图 sns.kdeplot()--核密度估计图 sns.distplot()--集合了matplotlib的hist()与核函数估计kdeplot的功能 Seaborn入门系列之kdeplot和 ...

  6. 机器学习模型可解释性的6种Python工具包,总有一款适合你!

    开发一个机器学习模型是任何数据科学家都期待的事情.我遇到过许多数据科学研究,只关注建模方面和评估,而没有解释. 然而,许多人还没有意识到机器学习可解释性在业务过程中的重要性.以我的经验,商业人士希望知 ...

  7. 【算法竞赛学习】资金流入流出预测-挑战Baseline_特征工程

    赛题简介 蚂蚁金服拥有上亿会员并且业务场景中每天都涉及大量的资金流入和流出,面对如此庞大的用户群,资金管理压力会非常大.在既保证资金流动性风险最小,又满足日常业务运转的情况下,精准地预测资金的流入流出 ...

  8. 机器学习模型 非线性模型_机器学习模型说明

    机器学习模型 非线性模型 A Case Study of Shap and pdp using Diabetes dataset 使用糖尿病数据集对Shap和pdp进行案例研究 Explaining ...

  9. 还在随缘炼丹?一文带你详尽了解机器学习模型可解释性的奥秘

    一只小狐狸带你解锁NLP/ML/DL秘籍 正文来源:腾讯技术工程 所谓炼丹,就是将大量灵材使用丹炉将其凝炼成丹.练成的灵丹蕴含灵材的大部分特性,方便携带,容易吸收.高级仙丹在炼制中更是能吸收天地灵气从 ...

最新文章

  1. 【AI】caffe使用步骤(三):编写求解文件solver.prototxt
  2. C#调用win32 api程序实例
  3. Lync Server外部访问系列PART6:启用外部访问
  4. Can‘t bind to formControl since it isn‘t a known property of input错误消息的处理
  5. dotnet core 应用是如何跑起来的 通过自己写一个 dotnet host 理解运行过程
  6. numpy 基础 —— np.linalg
  7. 备份及恢复计算机名及tcp-ip配置,tcp,ip协议,修复.docx
  8. [UIDevice currentDevice] setValue 强制屏幕旋转不生效
  9. 2019/10/13中国工商银行笔试编程题
  10. linux 关闭虚拟内存,Linux关于虚拟内存
  11. js之JSON格式用法和序列化JSON.stringify(value, replacer, space)以及反序列化JSON.parse(string)
  12. 元宇宙产业委一届二次全会召开 同步举办共享大会和全球元宇宙大会
  13. Linux与数据结构 2019-4-14
  14. [译]百里挑一:21个优质Swift开源App
  15. java求最大公约数_java求最大公约数(分解质因数)
  16. 7.30 正睿暑期集训营 A班训练赛
  17. java热加载_java--热加载
  18. 【repost】如何学好编程 (精挑细选编程教程,帮助现在在校学生学好编程,让你门找到编程的方向)四个方法总有一个学好编程的方法适合你...
  19. C++ pthread 多线程
  20. python多行注释符号快捷键_python多行注释快捷键

热门文章

  1. 【 C 】高级指针话题之高级声明的演进
  2. Windows下在后台运行jar包
  3. Python学习之路 (一)开发环境搭建
  4. Outlook中删除重复的邮件
  5. html5自带表单验证-美化改造
  6. oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)
  7. android连接sqlite进行简单的增删改查和事务管理
  8. DataTable分页控件设计(适用于Gridview和Repeater)
  9. Exchange服务器系列课程之六--维护邮件服务器(一)
  10. oracle你如何重置序列号,oracle sequence语句重置方介绍