精华内容
下载资源
问答
  • # XX为df格式 train特征表 feature_names = XX.columns.tolist() feature_names = np.array(feature_names) feature_importances = clf.feature_importances_ indices = np.argsort(feature_importances)[::-1] x = ...
    # XX为df格式 train特征表
    feature_names = XX.columns.tolist()
    feature_names = np.array(feature_names)
    feature_importances = clf.feature_importances_
    indices = np.argsort(feature_importances)[::-1]
    x = feature_importances[show_indices]
    y=feature_names[indices]
    
    
    展开全文
  • 这里尝试通过查看特征重要性来筛选特征: from xgboost import XGBRegressor from xgboost import plot_importance xgb = XGBRegressor() xgb.fit(X, Y) print(xgb.feature_importances_) plt.figure(figsize=(20, ...
  • 1 问题描述 我想用XGBoost来建立一个模型,通过特征...这里尝试通过查看特征重要性来筛选特征: from xgboost import XGBRegressor from xgboost import plot_importance xgb = XGBRegressor() xgb.fit(X, Y) prin...

    1 问题描述

    我想用XGBoost来建立一个模型,通过特征构造之后我需要做一个特征选择来减少特征数量、降维,使模型泛化能力更强,减少过拟合:

    这里尝试通过查看特征重要性来筛选特征:

    from xgboost import XGBRegressor
    from xgboost import plot_importance
    
    xgb = XGBRegressor()
    xgb.fit(X, Y)
    print(xgb.feature_importances_)
    
    plt.figure(figsize=(20, 10))
    plot_importance(xgb)
    plt.show()
    

    输出如下:
    在这里插入图片描述
    这里输出的特征重要性全部为 ‘nan’,画图也抛出了一个错误:ValueError:Booster.get_score() results in empty

    2 问题原因

    查了一下plot_importance()的源码,截取了相关部分如下:

        if len(importance) == 0:
            raise ValueError('Booster.get_score() results in empty')
    

    说明这里画图画不出来也是因为输出的特征重要性全部为’nan’。
    通过一下午的debug我发现问题出现在响应变量Y当中:

    Y.isnull().sum()
    

    输出为:

    5000
    

    Y出现了5000个空值,我才想起在做特征工程的时候为了方便,将训练集和测试集连接到一起了,而测试集中的5000个样本的响应变量都是’nan’。
    事实上,监督机器学习算法在训练的过程中,如果遇到响应变量为’nan’,很多算法都会出错,下面以简单的线性回归为例:

    import numpy as np
    import pandas as pd
    import sklearn
    from sklearn.linear_model import LinearRegression
    
    
    y = np.array([0, 1, 2, 3, np.nan, 5, 6, 7, 8, 9])
    x = np.random.rand(len(y),3)
    
    LR = LinearRegression()
    LR.fit(x,y)
    

    会抛出错误:
    在这里插入图片描述

    3 解决方案

    这里我是因为将训练集和测试集合并到一起了造成响应变量中出现’nan’,所以直接分开就可以了。如果训练集的响应变量本身就含有‘nan’,如果这类样本非常少,可以考虑删掉,如果是分类问题,可以考虑将这类样本单独作为一个类。

    from xgboost import XGBRegressor
    from xgboost import plot_importance
    
    xgb = XGBRegressor()
    xgb.fit(X, Y)
    
    im=pd.DataFrame({'importance':xgb.feature_importances_,'var':X.columns})
    im=im.sort_values(by='importance',ascending=False)
    im.head()
    

    输出如下:
    在这里插入图片描述

    fig,ax = plt.subplots(figsize=(8,8))
    plot_importance(xgb,max_num_features=10,ax=ax,importance_type='gain')
    plt.show()
    

    在这里插入图片描述

    展开全文
  • 加载模型 import xgboost as xgb ...# 查看模型重要性 sorted([(i,v) for i,v in model.get_fscore().items()],key=lambda x:x[1]) 结果如下: [………, ('f63', 396), ('f65', 397), ('f56', 405), ('f62',

    加载模型

    import xgboost as xgb
    model = xgb.Booster({'nthread':1})
    model.load_model("./card_xgb_model_v5")
    
    # 查看模型重要性
    sorted([(i,v) for i,v in model.get_fscore().items()],key=lambda x:x[1])
    

    结果如下:

    [………,
    ('f63', 396),
     ('f65', 397),
     ('f56', 405),
     ('f62', 409),
     ('f66', 418),
     ('f57', 434),
     ('f61', 449),
     ('f58', 461),
     ('f68', 498),
     ('f67', 505),
     ('f120', 776),
     ('f122', 2233),
     ('f123', 4710)]

    可以看到,f123的特征是最重要的(第一个特征是f0)。

    展开全文
  • 特征重要性评估

    2020-07-07 09:37:11
    1、gbdt、xgb 特征重要性源码解释:https://zhuanlan.zhihu.com/p/64759172 2、shap对xgboost特征重要性评估 https://zhuanlan.zhihu.com/p/64799119

    1、分类树特征重要性

    参考:gbdt、xgb 特征重要性源码解释https://zhuanlan.zhihu.com/p/64759172

    importance_type指importance的计算类型;可取值有5个:

    • weight
      权重(某特征在整个树群节点中出现的次数,出现越多,价值就越高)
    • gain
      (某特征在整个树群作为分裂节点的信息增益之和再除以某特征出现的频次)
    • total_gain
      (同上,代码中有介绍,这里total_gain就是gain)
    • cover和total_cover
      cover比较复杂,是指某特征节点样本的二阶导数和再除以某特征出现的频次

    原始的get_score()方法只是输出按照weight、gain、cover计算的统计值,为了得到百分比形式,将feature_importance_中特征归一化,分母为所有特征的重要性统计量之和。

    注意:xgboost sklearn API在计算特征重要性的时候默认importance_type=“gain”,而原始的get_score方法默认importance_type=“weight”

    2、回归树 特征重要性

    gbdt是根据分裂前后节点的impurity减少量来评估特征重要性;impurity计算和节点的分裂标准是MSE或MAE
    步骤:
    i 遍历每个节点,该节点对应分裂特征重要性统计量=分裂前impurity减去分裂后左右二叉树impurity之和
    ii 计算impurity的差值时,每个impurity都乘以对应权重(分支的样本数)
    iii 一个特征在树中可以被用来多次分裂,基于上一步的数据,等同于这里按照特征groupby后对其重要性统计量求和

    3、利用SHAP解释Xgboost模型

    https://zhuanlan.zhihu.com/p/64799119

    展开全文
  • 一行代码 plot_importance(model).set_yticklabels([feature_names]) 参考
  • 注意,下文的原始的...XGB知道吗,以XGB为例子说一下调参流程吧(个人的思路):一般来说采用贝叶斯优化或者遗传算法等启发式的优化算法确定相对最佳参数(如果不熟悉的话用随机搜索也是可以的,或者网格搜索但是...
  • 用xgboost模型对特征重要性进行排序

    万次阅读 多人点赞 2018-08-12 21:08:21
    用xgboost模型对特征重要性进行排序 在这篇文章中,你将会学习到: xgboost对预测模型特征重要性排序的原理(即为什么xgboost可以对预测模型特征重要性进行排序)。 如何绘制xgboost模型得到的特征重要性条形图。...
  • 在使用GBDT、RF、Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法 一 计算特征重要性方法 首先,目前计算特征重要性计算方法主要有两个方面: ...
  • 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 特征重要性绘图 也可以使用...
  • 很多时候我们输出的特征重要性gain值和cover值不一致,会导致些许困惑(到底那个特征最为重要,那个特征重要性要靠前)。所以,我们考虑用shapely value 来衡量特征重要性,它即考虑了特征的cover,同时也考虑了...
  • 完成onehot编码转换,在过程中将转换后特征维度记录下来,便于配合xgb特征选择获取不同特征权重 from sklearn.base import BaseEstimator, TransformerMixin from sklearn.utils import check_array from sklearn....
  • 最近在复习特征重要性时候,考虑到我们在使用GBDT、RF、Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,下面收集整理了一下各模型输出特征重要性的原理与方法;
  • Xgboost筛选特征重要性

    万次阅读 2016-12-16 21:00:38
    根据结构分数的增益情况计算出来选择哪个特征的哪个分割点,某个特征重要性,就是它在所有树中出现的次数之和。 使用代码 import pandas as pd import xgboost as xgb import operator from matplotlib ...
  • 【翻译自 : Feature Importance and Feature Selection With ... 使用诸如梯度增强之类的决策树方法的集成的好处是,它们可以从训练有素的预测模型中自动提供特征重要性的估计。 在本文中,您将发现如何使用P...
  • XGBoost输出特征重要性以及筛选特征 1,梯度提升算法是如何计算特征重要性的? 使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分。一般来说,重要性分数,衡量了特征在模型中的...
  • 一、xgboost对特征重要性进行排序的原理(即为什么xgboost可以对特行的重要性进行排序) 根据结构分数的增益情况,计算选择哪个特征的哪个分割点;某个特征重要性,就是它在所有树中出现的次数之和。 二、如何...
  • 用xgboost获取特征重要性原理及实践

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

    千次阅读 2018-05-07 21:28:33
    特征的选择过程中,如果学习器(基学习器)是树模型的话,可以根据特征重要性来筛选有效的特征。本文是对Random Forest、GBDT、XGBoost如何用在特征选择上做一个简单的介绍。 各种模型的特征重要性计算 ...

空空如也

空空如也

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

xgb特征重要性