精华内容
下载资源
问答
  • xgboost获取特征重要性原理及实践

    千次阅读 2019-04-13 17:39:49
    1.xgboost特征重要性排序的原理 xgboost根据结构分数的增益情况计算出来选择哪个特征作为分割点,而某个特征重要性就是它在所有树中出现的次数之和。也就是说一个属性越多的被用来在模型中构建决策树,它的重要性...

    1.xgboost对特征重要性排序的原理

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

    1. xgboost可以通过get_score获取特征重要性
      for importance_type in (‘weight’, ‘gain’, ‘cover’, ‘total_gain’, ‘total_cover’):
      print(’%s: ’ % importance_type, bst.get_score(importance_type=importance_type))
      weight - 该特征在所有树中被用作分割样本的特征的次数。
      gain - 在所有树中的平均增益。
      cover - 在树中使用该特征时的平均覆盖范围。(还不是特别明白)

    2. 利用plot_importance画出各个特征的重要性排序

    3. 可以通过测试多个阈值,借助衡量分类器优劣的指标,来从特征重要性中选择特征。
      下面利用kaggle的heartdisease数据实证分析

    import numpy as np
    import pandas as pd
    
    from sklearn.model_selection import train_test_split,StratifiedKFold,train_test_split,GridSearchCV
    from sklearn.metrics import accuracy_score, confusion_matrix, mean_squared_error,roc_auc_score
    from xgboost import plot_importance
    from matplotlib import pyplot as plt
    import xgboost as xgb
    #利用xgb.train中的get_score得到weight,gain,以及cover
    params={        'max_depth':7,
                    'n_estimators':80,
                    'learning_rate':0.1, 
                    'nthread':4,
                    'subsample':1.0,
                    'colsample_bytree':0.5,
                    'min_child_weight' : 3,
                    'seed':1301}
    bst = xgb.train(params, xgtrain, num_boost_round=1)
    for importance_type in ('weight', 'gain', 'cover', 'total_gain', 'total_cover'):
        print('%s: ' % importance_type, bst.get_score(importance_type=importance_type))
    import graphviz
    xgb.plot_tree(bst)
    plt.show()
    

    得到的结果如下:
    weight: {‘slope’: 2, ‘sex’: 2, ‘age’: 7, ‘chol’: 13, ‘trestbps’: 9, ‘restecg’: 2}
    gain: {‘slope’: 4.296458304, ‘sex’: 2.208011625, ‘age’: 0.8395543860142858, ‘chol’: 0.6131722695384615, ‘trestbps’: 0.49512829022222227, ‘restecg’: 0.679761901}
    cover: {‘slope’: 116.5, ‘sex’: 106.0, ‘age’: 24.714285714285715, ‘chol’: 22.846153846153847, ‘trestbps’: 18.555555555555557, ‘restecg’: 18.0}
    total_gain: {‘slope’: 8.592916608, ‘sex’: 4.41602325, ‘age’: 5.8768807021, ‘chol’: 7.971239503999999, ‘trestbps’: 4.456154612000001, ‘restecg’: 1.359523802}
    total_cover: {‘slope’: 233.0, ‘sex’: 212.0, ‘age’: 173.0, ‘chol’: 297.0, ‘trestbps’: 167.0, ‘restecg’: 36.0}

    from sklearn.feature_selection import SelectFromModel
    model = xgb.XGBClassifier()
    model.fit(X_train, y_train)
    #plot_importance;利用plot_importance画出各个特征的重要性排序
    from xgboost import plot_importance
    plot_importance(model)
    plt.show()
    

    得到结果如下:
    在这里插入图片描述

    #我们可以通过测试多个阈值,来从特征重要性中选择特征。具体而言,每个输入变量的特征重要性,本质上允许我们#通过重要性来测试每个特征子集。
    # make predictions for test data and evaluate
    y_pred = model.predict(X_test)
    predictions = [round(value) for value in y_pred]
    accuracy = accuracy_score(y_test, predictions)
    print("Accuracy: %.2f%%" % (accuracy * 100.0))
    # Fit model using each importance as a threshold
    thresholds = np.sort(model.feature_importances_)
    for thresh in thresholds:
    	# select features using threshold
    	selection = SelectFromModel(model, threshold=thresh, prefit=True)
    	select_X_train = selection.transform(X_train)
    	# train model
    	selection_model = xgb.XGBClassifier()
    	selection_model.fit(select_X_train, y_train)
    	# eval model
    	select_X_test = selection.transform(X_test)
    	y_pred = selection_model.predict(select_X_test)
    	predictions = [round(value) for value in y_pred]
    	accuracy = accuracy_score(y_test, predictions)
    	print("Thresh=%.3f, n=%d, Accuracy: %.2f%%" % (thresh, select_X_train.shape[1], accuracy*100.0))
    
    

    Accuracy: 84.62%
    Thresh=0.025, n=13, Accuracy: 84.62%
    Thresh=0.026, n=12, Accuracy: 80.22%
    Thresh=0.026, n=11, Accuracy: 79.12%
    Thresh=0.028, n=10, Accuracy: 76.92%
    Thresh=0.032, n=9, Accuracy: 78.02%
    Thresh=0.036, n=8, Accuracy: 80.22%
    Thresh=0.041, n=7, Accuracy: 76.92%
    Thresh=0.066, n=6, Accuracy: 76.92%
    Thresh=0.085, n=5, Accuracy: 84.62%
    Thresh=0.146, n=4, Accuracy: 80.22%
    Thresh=0.151, n=3, Accuracy: 76.92%
    Thresh=0.163, n=2, Accuracy: 74.73%
    Thresh=0.174, n=1, Accuracy: 78.02%
    由上述结果可以看出,随着阈值的增大,特征数目的减少,精确度有减小的趋势,一般情况下用交叉验证作为模型评估方案可能是更有用的策略。这在下一篇的xgb.cv中将实现。xgb.cv

    展开全文
  • XGBoost中提供了三种特征重要性的计算方法: ‘weight’ - the number of times a feature is used to split the data across all trees.‘gain’ - the average gain of the feature when it is used in trees...

    在XGBoost中提供了三种特征重要性的计算方法:

    ‘weight’ - the number of times a feature is used to split the data across all trees. 
    ‘gain’ - the average gain of the feature when it is used in trees 
    ‘cover’ - the average coverage of the feature when it is used in trees

    简单来说 
    weight就是在所有树中特征用来分割的节点个数总和; 
    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值。

    还是举李航书上那个例子,我们用不同颜色来表示不同的特征,绘制下图 
    这里写图片描述

    转载于:https://www.cnblogs.com/cupleo/p/9951436.html

    展开全文
  • 【算法】关于xgboost特征重要性的评估

    万次阅读 多人点赞 2019-05-29 08:21:59
    xgboost很好用,但是很多同学对它特征重要性评估的原理不太明白。今天简单梳理下: 特征重要性函数 调用xgb.feature_importances_函数,即可求出各个特种的重要性,这是我们的目标。 现在就来探究一下,这个feature_...

    xgboost很好用,但是很多同学对它特征重要性评估的原理不太明白。今天简单梳理下:

    在这里插入图片描述

    特征重要性函数

    调用xgb.feature_importances_函数,即可求出各个特种的重要性,这是我们的目标。
    现在就来探究一下,这个feature_importances是怎么得到的。
    在这里插入图片描述
    那么重要性指标到底是如何评价的呢?进入feature_importances_,可以看到:
    ①求每个特征对应的score
    ②把每个特征得到的score/sum(score)
    大概思路如此。
    在这里插入图片描述
    那么,现在就要知道,这个score到底是怎么求得的?

    此时,我们需要知道,特征重要性指标评估三种常用的方式:

    gain 增益意味着相应的特征对通过对模型中的每个树采取每个特征的贡献而计算出的模型的相对贡献。与其他特征相比,此度量值的较高值意味着它对于生成预测更为重要。

    cover 覆盖度量指的是与此功能相关的观测的相对数量。例如,如果您有100个观察值,4个特征和3棵树,并且假设特征1分别用于决定树1,树2和树3中10个,5个和2个观察值的叶节点;那么该度量将计算此功能的覆盖范围为10 + 5 + 2 = 17个观测值。这将针对所有4项功能进行计算,并将以17个百分比表示所有功能的覆盖指标。

    freq 频率(频率)是表示特定特征在模型树中发生的相对次数的百分比。在上面的例子中,如果feature1发生在2个分裂中,1个分裂和3个分裂在每个树1,树2和树3中;那么特征1的权重将是2 + 1 + 3 = 6。特征1的频率被计算为其在所有特征的权重上的百分比权重。

    增益是解释每个特征的相对重要性的最相关属性。
    在这里插入图片描述
    至于gain的算法,可以回顾下cart或者xgboost相关内容:
    在这里插入图片描述
    继续点击进入get_score函数。可以看到,源码中,就是用gain来做重要性判断的。
    在这里插入图片描述
    这么说显得稍微抽象一点,我们画树图,或者直接把trees打印出来:

    在这里插入图片描述
    在这里插入图片描述

    可以看到,每颗tree都有对应的fid、gain、cover、leaf,只需要把对应的gain提取出来即可。
    回到get_score函数,可以看到,大致思路如我所想:
    ①for tree in trees
    ②for line in tree.split
    ③get gain

    这里需要注意的是:特征gain的叠加性,判断一个特征的gain,需要把其在每棵树对应的gain分别得到,然后求平均,这样比较靠谱。
    在这里插入图片描述
    一顿操作之后,可以看到,每个特征对应的average gain就得到了:
    在这里插入图片描述

    再根据之前所说的求重要性占比,即可得到一个特征就增益系数gain而言,对整个模型的重要性程度
    在这里插入图片描述


      对数据分析、机器学习、数据科学、金融风控等感兴趣的小伙伴,需要数据集、代码、行业报告等各类学习资料,可添加微信:wu805686220(记得要备注喔!),也可关注微信公众号:风控圏子(别打错字,是圏子,不是圈子,算了直接复制吧!)

    关注公众号后,可联系圈子助手加入如下社群:

    • 机器学习风控讨论群(微信群)
    • 反欺诈讨论群(微信群)
    • python学习交流群(微信群)
    • 研习社资料(qq群:102755159)(干货、资料、项目、代码、报告、课件)

    相互学习,共同成长。

    展开全文
  • XGBoost 输出特征重要性以及筛选特征

    万次阅读 2018-08-26 10:27:00
    1.输出XGBoost特征重要性 from matplotlib import pyplot pyplot.bar(range(len(model_XGB.feature_importances_)), model_XGB.feature_importances_) pyplot.show() XGBoost 特征重要性绘图 也可以使用...

    1.输出XGBoost特征的重要性

    from matplotlib import pyplot
    pyplot.bar(range(len(model_XGB.feature_importances_)), model_XGB.feature_importances_)
    pyplot.show()

    XGBoost 特征重要性绘图

    也可以使用XGBoost内置的特征重要性绘图函数

    # plot feature importance using built-in function
    from xgboost import plot_importance
    plot_importance(model_XGB)
    pyplot.show()

    XGBoost 内置的特征重要性绘图

    2.根据特征重要性筛选特征

    from numpy import sort
    from sklearn.feature_selection import SelectFromModel
    
    # Fit model using each importance as a threshold
    thresholds = sort(model_XGB.feature_importances_)
    for thresh in thresholds:
      # select features using threshold
      selection = SelectFromModel(model_XGB, threshold=thresh, prefit=True)
      select_X_train = selection.transform(X_train)
      # train model
      selection_model = XGBClassifier()
      selection_model.fit(select_X_train, y_train)
    # eval model
      select_X_test = selection.transform(X_test)
      y_pred = selection_model.predict(select_X_test)
      predictions = [round(value) for value in y_pred]
      accuracy = accuracy_score(y_test, predictions)
      print("Thresh=%.3f, n=%d, Accuracy: %.2f%%" % (thresh, select_X_train.shape[1],
          accuracy*100.0))

    XGBoost 筛选特征

    参考:https://blog.csdn.net/u011630575/article/details/79423162

    展开全文
  • xgboost模型对特征重要性进行排序

    万次阅读 多人点赞 2018-08-12 21:08:21
    xgboost对预测模型特征重要性排序的原理(即为什么xgboost可以对预测模型特征重要性进行排序)。 如何绘制xgboost模型得到的特征重要性条形图。 如何根据xgboost模型得到的特征重要性,在scikit-learn进行特征选择...
  • RF,GBDT,XGBoost,lightGBM都属于集成学习(Ensemble Learning),集成学习的目的是通过结合多个基学习器的预测结果来改善基本学习器的泛化能力和鲁棒。根据基本学习器的生成方式,目前的集成学习方法大致分为两大...
  • Xgboost筛选特征重要性

    万次阅读 2016-12-16 21:00:38
    根据结构分数的增益情况计算出来选择哪个特征的哪个分割点,某个特征重要性,就是它在所有树中出现的次数之和。 使用代码 import pandas as pd import xgboost as xgb import operator from matplotlib ...
  • 一、xgboost特征重要性进行排序的原理(即为什么xgboost可以对特行的重要性进行排序) 根据结构分数的增益情况,计算选择哪个特征的哪个分割点;某个特征重要性,就是它在所有树中出现的次数之和。 二、如何...
  • XGBoost作为比赛大杀器,内置了几种重要性函数,今天我们就在这篇文章中梳理三种常见的特征重要性计算方法,并思考他们的使用场景。 xgboost.plot_importance(booster, ax=None, height=0.2, xlim=None, ylim=None, ...
  • 而且可以在训练的过程中给出各个特征的评分,从而表明每个特征对模型训练的重要性, 调用的源码就不准备详述,本文主要侧重的是计算的原理,函数get_fscore源码如下, 源码来自安装包:xgboost/python-package/...
  • 在使用GBDT、RF、Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性原理与方法 一 计算特征重要性方法 首先,目前计算特征重要性计算方法主要有两个方面: ...
  • 什么是Xgboost:boosting算法的思想是将许多弱分类器集成在一起形成强分类器,xgboost是一种提升树模型,许多树...CART回归树模型:假设树是二叉树,通过不断将特征进行分裂 二、XGBoost算法思想 就是不断的添加树,...
  • 随机森林中特征重要性xgboost不同: 随机森林中的特征重要性主要是基于不纯度(也可以叫做Gini importance): 对于分类问题的话,就是gini不纯度 对于回归问题的话,MSE(Mean Square error)或者MAE(Mean absolute...
  • 最近在复习特征重要性时候,考虑到我们在使用GBDT、RF、Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,下面收集整理了一下各模型输出特征重要性原理与方法;
  • XGBoost 3 - XGBoost原理及调用

    千次阅读 2018-07-03 14:30:30
    XGBoost原理 Boosting AdaBoost Gradient Boosting XGBoost 1 - Boosting Boosting: 将弱学习器组合成强分类 构造一个性能很高的强学习器是一件很困难的事情 但构造一个性能一般的弱学习器并不难 弱学习器:...
  • XGBoost输出特征重要性以及筛选特征 1,梯度提升算法是如何计算特征重要性的? 使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分。一般来说,重要性分数,衡量了特征在模型中的...
  • 在复习特征重要性时候,考虑到我们在使用GBDT ,RF,Xgboost 等树类模型建模时,往往可以通过feature_importance 来返回特征重要性,一下是各模型输出特征重要性原理和方法。 1 计算特征重要性方法 1-1 训练过程...
  • 目录预备知识:CART树XGBoost思想XGBoost目标函数如何学习第 棵树基于泰勒公式展开推导目标函数寻找最佳树结点分裂与停止生长寻找最佳分裂点对比GBDT常见面试题预备知识:CART树CART回归树是通过不断进行特征分裂...
  • import pandas as pd ...import xgboost as xgb import operator from matplotlib import pylab as plt def ceate_feature_map(features): outfile = open('xgb.fmap', 'w') i = 0 for feat in ...
  • xgboost原理

    2017-07-08 21:34:47
    xgboost原理
  • 文章目录集成学习,xgboost.plot_importance 特征重要性源代码 集成学习,xgboost.plot_importance 特征重要性 源代码 # -*- coding:utf-8 -*- # /usr/bin/python ''' @Author : Errol @Describe: @Evn : @Date : -...
  • XGBoost 与 Boosted Tree 原理

    千次阅读 2017-07-25 18:43:53
    这篇文章是XGBoost的作者——陈天奇大神对XGBoost原理的解析,文章脉络十分清晰,环环相扣,每个部分都列举了对应的例子,帮助我们更好的理解原文,看完收获良多。1、有监督学习算法的逻辑组成要讲boosted tree,要...
  • 机器学习面试150题:不只是考SVM xgboost 特征工程

    万次阅读 多人点赞 2020-08-29 12:15:29
    机器学习、深度学习方面的能力,16年起随着AlphaGo的横空出世,深度学习瞬间横扫各个领域,这里面的重点包括各个模型:决策树、随机森林、xgboost、SVM、特征工程、CNN、RNN、LSTM等等; 根据不同业务场景的技术...
  • RF、GBDT、XGboost特征选择方法

    万次阅读 多人点赞 2018-04-19 22:35:02
    RF、GBDT、XGboost都可以做特征选择,属于特征选择中的嵌入式方法。比如在sklearn中,可以用属性feature_importances_去查看特征重要度, 比如:from sklearn import ensemble #grd = ensemble....
  • XGBoost详解--原理+模型技巧

    千次阅读 2020-01-20 17:26:07
    XGBoost详解
  • XGBoost的基本原理

    万次阅读 多人点赞 2018-08-18 15:15:23
    XGBoost原理与实践

空空如也

空空如也

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

xgboost特征重要性原理