精华内容
下载资源
问答
  • xgboost特征重要性

    千次阅读 2019-02-16 21:56:58
    from sklearn.model_selection import train_test_split from sklearn import metrics from sklearn.datasets import make_hastie_10_2 from xgboost.sklearn import XGBClassifier...from xgboost import plot_impo...

    from sklearn.model_selection import train_test_split
    from sklearn import metrics
    from sklearn.datasets  import  make_hastie_10_2
    from xgboost.sklearn import XGBClassifier
    from xgboost import plot_importance
    from matplotlib import pyplot

    X, y = make_hastie_10_2(random_state=0)

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)##test_size测试集合所占比例

    clf = XGBClassifier(
    silent=0 ,#设置成1则没有运行信息输出,最好是设置为0.是否在运行升级时打印消息。
    learning_rate= 0.3, # 如同学习率
    min_child_weight=1, 
    max_depth=6, # 构建树的深度,越大越容易过拟合
    gamma=0,  # 树的叶子节点上作进一步分区所需的最小损失减少,越大越保守,一般0.1、0.2这样子。
    subsample=1, # 随机采样训练样本 训练实例的子采样比
    max_delta_step=0,#最大增量步长,我们允许每个树的权重估计。
    colsample_bytree=1, # 生成树时进行的列采样 
    reg_lambda=1,  # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合。
    n_estimators=100, #树的个数
    seed=1000 #随机种子
    )

    model = clf.fit(X_train,y_train,eval_metric='auc')

    y_true, y_pred = y_test, clf.predict(X_test)

    print("Accuracy : %.4g" % metrics.accuracy_score(y_true, y_pred))
    model.fit(X, y)
    print(plot_importance(model))
    print(pyplot.show())

    展开全文
  • xgboost特征重要性指标: weight, gain, cover 文章转载自: https://blog.csdn.net/sujinhehehe/article/details/84201415 官方解释 Python中的xgboost可以通过get_fscore获取特征重要性,先看看官方对于这个方法的...

    xgboost特征重要性指标: weight, gain, cover

    文章转载自: https://blog.csdn.net/sujinhehehe/article/details/84201415

    官方解释
    Python中的xgboost可以通过get_fscore获取特征重要性,先看看官方对于这个方法的说明:

    get_score(fmap=’’, importance_type=‘weight’)

    Get feature importance of each feature. Importance type can be defined as:

    ‘weight’: the number of times a feature is used to split the data across all trees.
    ‘gain’: the average gain across all splits the feature is used in.
    ‘cover’: the average coverage across all splits the feature is used in.
    ‘total_gain’: the total gain across all splits the feature is used in.
    ‘total_cover’: the total coverage across all splits the feature is used in.
    看释义不直观,下面通过训练一个简单的模型,输出这些重要性指标,再结合释义进行解释。

    代码实践
    首先构造10个样例的样本,每个样例有两维特征,标签为0或1,二分类问题:

    import numpy as np
    sample_num = 10
    feature_num = 2
    np.random.seed(0)
    data = np.random.randn(sample_num, feature_num)
    np.random.seed(0)
    label = np.random.randint(0, 2, sample_num)
    

    输出data和label:

    array([[ 1.76405235,  0.40015721],
           [ 0.97873798,  2.2408932 ],
           [ 1.86755799, -0.97727788],
           [ 0.95008842, -0.15135721],
           [-0.10321885,  0.4105985 ],
           [ 0.14404357,  1.45427351],
           [ 0.76103773,  0.12167502],
           [ 0.44386323,  0.33367433],
           [ 1.49407907, -0.20515826],
           [ 0.3130677 , -0.85409574]])
    # label:
    array([0, 1, 1, 0, 1, 1, 1, 1, 1, 1])
    

    训练,这里为了便于下面计算,将树深度设为3(‘max_depth’: 3),只用一棵树(num_boost_round=1):

    import xgboost as xgb
    train_data = xgb.DMatrix(data, label=label)
    params = {'max_depth': 3}
    bst = xgb.train(params, train_data, 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))
    

    结果:

    weight:  {'f0': 1, 'f1': 2}
    gain:  {'f0': 0.265151441, 'f1': 0.375000015}
    cover:  {'f0': 10.0, 'f1': 4.0}
    total_gain:  {'f0': 0.265151441, 'f1': 0.75000003}
    total_cover:  {'f0': 10.0, 'f1': 8.0}
    

    画出唯一的一棵树图:

    xgb.to_graphviz(bst, num_trees=0)
    

    下面就结合这张图,解释下各指标含义:
    在这里插入图片描述

    一、weight: {‘f0’: 1, ‘f1’: 2}
    在所有树中,某特征被用来分裂节点的次数,在本例中,可见分裂第1个节点时用到f0,分裂第2,3个节点时用到f1,所以weight_f0 = 1, weight_f1 = 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表示在所有树中,某特征在每次分裂节点时处理(覆盖)的所有样例的数量。
    三、cover: {‘f0’: 10.0, ‘f1’: 4.0}
    cover = total_cover / weight,在本例中,cover_f0 = 10 / 1,cover_f1 = 8 / 2 = 4.
    四、total_gain: {‘f0’: 0.265151441, ‘f1’: 0.75000003}
    在所有树中,某特征在每次分裂节点时带来的总增益,如果用熵或基尼不纯衡量分裂前后的信息量分别为i0和i1,则增益为(i0 - i1)。
    五、gain: {‘f0’: 0.265151441, ‘f1’: 0.375000015}
    gain = total_gain / weight,在本例中,gain_f0 = 0.265151441 / 1,gain_f1 = 75000003 / 2 = 375000015.
    在平时的使用中,多用total_gain来对特征重要性进行排序。

    By The Way
    构造xgboost分类器还有另外一种方式,这种方式类似于sklearn中的分类器,采用fit, transform形式训练模型:

    from xgboost import XGBClassifier
    cls = XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
           colsample_bytree=1, gamma=0, learning_rate=0.07, max_delta_step=0,
           max_depth=3, min_child_weight=1, missing=None, n_estimators=300,
           n_jobs=1, nthread=None, objective='binary:logistic', random_state=0,
           reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,
           silent=True, subsample=1)
    

    训练模型

    for importance_type in ('weight', 'gain', 'cover', 'total_gain', 'total_cover'):
        print('%s: ' % importance_type, cls.get_booster().get_score(importance_type=importance_type))
    

    采用下面的方式获取特征重要性指标:

    for importance_type in (‘weight’, ‘gain’, ‘cover’, ‘total_gain’, ‘total_cover’):
    print(’%s: ’ % importance_type, cls.get_booster().get_score(importance_type=importance_type))

    展开全文
  • 1 feature importancegradient boosting 有一个优点是可以...首先要进入两个类:from xgboost import plot_importancefrom matplotlib import pyplot然后在model fit后面添加打印或绘制特征重要性:model.fit(X, y)...

    1 feature importance

    gradient boosting 有一个优点是可以给出训练好的模型的特征重要性,这样就可以知道哪些变量需要被保留,哪些可以舍弃。

    首先要进入两个类:

    from xgboost import plot_importance

    from matplotlib import pyplot

    然后在model fit后面添加打印或绘制特征重要性:

    model.fit(X, y)

    plot_importance(model)

    pyplot.show()

    2 参数优化

    XGBoost中提供GridSearchCV方法来对一些重要的超参进行调整,例如:

    learning_rate

    tree_depth

    subsample

    n_estimators

    max_depth

    当然,大多时候学习率的大小一定程度上很影响模型的稳定性,学习率较小容易过拟合,学习率较大又容易欠拟合,所以很多时候都会先考虑对学习率进行调整。

    引入如下两个类:

    from sklearn.model_selection import GridSearchCV

    from sklearn.model_selection import StratifiedKFold

    将要尝试的学习率的值放在一个list中即可:

    learning_rate = [0.005, 0.001, 0.01, 0.1, 0.2, 0.3]

    model = XGBClassifier()

    learning_rate = [0.005, 0.001, 0.01, 0.1, 0.2, 0.3]

    param_grid = dict(learning_rate=learning_rate)

    kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=7)

    grid_search = GridSearchCV(model, param_grid, scoring="neg_log_loss", n_jobs=-1, cv=kfold)

    grid_result = grid_search.fit(X, Y)

    展开全文
  • 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值。

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

    展开全文
  • 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...
  • 官方解释Python中的xgboost可以通过get_fscore获取特征重要性,先看看官方对于这个方法的说明:get_score(fmap=’’, importance_type=‘weight’)Get feature importance of each feature. Importance type can be ...
  • 【算法】关于xgboost特征重要性的评估

    万次阅读 多人点赞 2019-05-29 08:21:59
    xgboost很好用,但是很多同学对它特征重要性评估的原理不太明白。今天简单梳理下: 特征重要性函数 调用xgb.feature_importances_函数,即可求出各个特种的重要性,这是我们的目标。 现在就来探究一下,这个feature_...
  • xgb_trained_model = xgb.train(params, train_xgb_split, 500, watch_list, early_stopping_rounds=50, verbose_eval=10) importance = xgb_trained_model.get_fscore() temp1 = [] temp2 = [] ...
  • 特征重要性指标评估三种常用的方式: ①gain 增益意味着相应的特征对通过对模型中的每个树采取每个特征的贡献而计算出的模型的相对贡献。与其他特征相比,此度量值的较高值意味着它对于生成预测更为重要。 ②cover...
  • XGBoost 输出特征重要性以及筛选特征

    千次阅读 2018-08-26 10:27:00
    1.输出XGBoost特征的重要性 from matplotlib import pyplot pyplot.bar(range(len(model_XGB.feature_importances_)), model_XGB....XGBoost 特征重要性绘图 也可以使用XGBoost内置的特征重要性绘图函数 # pl...
  • xgboost获取特征重要性原理及实践

    千次阅读 2019-04-13 17:39:49
    1.xgboost对特征重要性排序的原理 xgboost根据结构分数的增益情况计算出来选择哪个特征作为...2 xgboost特征重要性排序的方法 xgboost可以通过get_score获取特征重要性 for importance_type in (‘weight’, ‘...
  • 1.输出XGBoost特征重要性from matplotlib import pyplotpyplot.bar(range(len(model_XGB.feature_importances_)), model_XGB.feature_importances_)pyplot.show()from matplotlib import pyplotpyplot.bar(range...
  • 原标题:xgboost输出特征重要性排名和权重值向AI转型的程序员都关注了这个号????????????机器学习AI算法工程 公众号:datayx在机器学习实践中,我们要经常用到xgboost框架去训练数据,然后用训练得到的模型再去预测...
  • Xgboost筛选特征重要性

    万次阅读 2016-12-16 21:00:38
    根据结构分数的增益情况计算出来选择哪个特征的哪个分割点,某个特征重要性,就是它在所有树中出现的次数之和。 使用代码 import pandas as pd import xgboost as xgb import operator from matplotlib ...
  • 一、xgboost特征重要性进行排序的原理(即为什么xgboost可以对特行的重要性进行排序) 根据结构分数的增益情况,计算选择哪个特征的哪个分割点;某个特征的重要性,就是它在所有树中出现的次数之和。 二、如何...
  • xgboost模型对特征重要性进行排序

    万次阅读 多人点赞 2018-08-12 21:08:21
    xgboost模型对特征重要性进行排序 在这篇文章中,你将会学习到: xgboost对预测模型特征重要性排序的原理(即为什么xgboost可以对预测模型特征重要性进行排序)。 如何绘制xgboost模型得到的特征重要性条形图。...
  • RF、GBDT、XGboost都可以做特征选择,属于特征选择中的嵌入式方法。比如在sklearn中,可以用属性feature_importances_去查看特征重要度, 比如: from sklearn import ensemble #grd = ensemble....
  • xgboost输出特征重要性排名和权重值

    万次阅读 热门讨论 2018-07-29 20:18:48
    在判断训练得到的模型是否合理时,一个很重要的步骤就是查看xgboost模型的特征重要性排序。如果观察得到模型的排名前几的特征都不符合我们正常的思维,那么模型很可能是不稳定或者有问题的。在训练得到模型文件及...
  • 我们都知道在常见的逻辑回归模型中,每个特征对应一个模型参数wiw_{i}wi​,该参数约大,那么该特征对模型预测结果的影响就会越大,我们就说该特征就越重要,因此LR模型的特征重要性评估方式就是wiw_{i}wi​的大小,...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 179
精华内容 71
关键字:

xgboost特征重要性