精华内容
下载资源
问答
  • 回归模型 中 特征 重要性 分析
    千次阅读
    2019-12-12 23:54:21

    1.树模型,建立好模型以后,看那个属性里根节点越近则越重要。模型会自带一些输出重要属性的方法。
    2.线性模型,模型一般可以直接输出参数,参数越大越重要。
    3.利用互信息等类似的方法可以做,sklearn有,scipy里面也有。

    • l1正则,可以观察训练完毕后参数为零的特征,删除掉就可以。模型自带。
      2. sklearn有一个feature_select模块可以做特征选择。sklearn库里面其实基本的都可以搞定。
      3. 6.xgb,lightgbm 这些开源库也可以做。
      4. 线性回归模型中的ANOVA方法。 来自sklearn里的
      5. RandomForestClassifier,自带 feature_importances_ 功能。返回特征向量的重要性。

    1、通过方差筛选:sklearn中的VarianceThreshold类可以用来做方差选择
    2、卡方检验:sklearn中的chi2类可以用来做卡方检验
    3、互信息:sklearn中的mutual_info_classif(分类)和mutual_info_regression(回归)来计算各个输入特征和输出值之间的互信息
    4、sklearn的SelectFromModel函数

    from sklearn.model_selection import cross_val_score
    from sklearn.datasets import make_blobs
    from sklearn.ensemble import RandomForestClassifier

    clf = RandomForestClassifier(n_estimators=10, max_depth=None,min_samples_split=2, random_state=0)
    clf.fit(x_train, Y_train)

    importances = clf.feature_importances_
    std = np.std([tree.feature_importances_ for tree in clf.estimators_],
    axis=0)
    indices = np.argsort(importances)[::-1]

    Print the feature ranking

    print(“Feature ranking:”)
    for f in range(min(20,x_train.shape[1])):
    print("%d. feature %d %s (%f)" % (f + 1, indices[f], importances[indices[f]]))

    Plot the feature importances of the forest

    plt.figure()
    plt.title(“Feature importances”)
    plt.bar(range(x_train.shape[1]), importances[indices],
    color=“r”, yerr=std[indices], align=“center”)
    plt.xticks(range(x_train.shape[1]), indices)
    plt.xlim([-1, x_train.shape[1]])
    plt.show()

    更多相关内容
  • 使用诸如梯度增强之类的决策树方法的集成的好处是,它们可以从训练有素的预测模型中自动提供特征重要性的估计。在本文中,您将发现如何使用Python中的XGBoost库来估计特征对于预测性建模问...

    使用诸如梯度增强之类的决策树方法的集成的好处是,它们可以从训练有素的预测模型中自动提供特征重要性的估计。

    在本文中,您将发现如何使用Python中的XGBoost库来估计特征对于预测性建模问题的重要性,阅读这篇文章后,您将知道:

    • 如何使用梯度提升算法计算特征重要性。

    • 如何绘制由XGBoost模型计算的Python中的特征重要性。

    • 如何使用XGBoost计算的特征重要性来执行特征选择。

    梯度提升中的特征重要性

    使用梯度增强的好处是,在构建增强后的树之后,检索每个属性的重要性得分相对简单。通常,重要性提供了一个分数,该分数指示每个特征在模型中构建增强决策树时的有用性或价值。用于决策树的关键决策使用的属性越多,其相对重要性就越高。

    此重要性是针对数据集中的每个属性明确计算得出的,从而可以对属性进行排名并进行相互比较。单个决策树的重要性是通过每个属性拆分点提高性能指标的数量来计算的,并由节点负责的观察次数来加权。性能度量可以是用于选择拆分点的纯度(基尼系数),也可以是其他更特定的误差函数。然后,将特征重要性在模型中所有决策树之间平均。有关如何在增强型决策树中计算特征重要性的更多技术信息,请参见《统计学习的要素:数据挖掘,推理和预测》(第367页)第10.13.1节“预测变量的相对重要性”。另外,请参见Matthew Drury对StackOverflow问题“ Boosting的相对变量重要性”的回答,在此他提供了非常详细和实用的答案。

    手动绘制特征重要性

    训练有素的XGBoost模型会自动计算出您的预测建模问题中的特征重要性。这些重要性分数可在训练模型的feature_importances_成员变量中获得。例如,可以按如下所示直接打印它们:

    print(model.feature_importances_)
    

    我们可以将这些得分直接绘制在条形图上,以直观表示数据集中每个特征的相对重要性。例如:

    # plot
    pyplot.bar(range(len(model.feature_importances_)), model.feature_importances_)
    pyplot.show()
    

    我们可以通过在皮马印第安人发病的糖尿病数据集上训练XGBoost模型并根据计算出的特征重要性创建条形图来证明这一点。

    下载数据集并将其放置在当前工作目录中。

    数据集文件:

    https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.csv

    数据集详细信息:

    https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.names

    # plot feature importance manually
    from numpy import loadtxt
    from xgboost import XGBClassifier
    from matplotlib import pyplot
    # load data
    dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
    # split data into X and y
    X = dataset[:,0:8]
    y = dataset[:,8]
    # fit model no training data
    model = XGBClassifier()
    model.fit(X, y)
    # feature importance
    print(model.feature_importances_)
    # plot
    pyplot.bar(range(len(model.feature_importances_)), model.feature_importances_)
    pyplot.show()
    

    注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

    首先运行此示例将输出重要性分数。

    [ 0.089701    0.17109634  0.08139535  0.04651163  0.10465116  0.2026578 0.1627907   0.14119601]
    

    我们还获得了相对重要性的条形图。

    该图的缺点是要素按其输入索引而不是其重要性排序。我们可以在绘制之前对特征进行排序。

    值得庆幸的是,有一个内置的绘图函数可以帮助我们。

    使用内置XGBoost特征重要性图XGBoost库提供了一个内置函数,可以按重要性顺序绘制要素。该函数称为plot_importance(),可以按以下方式使用:

    # plot feature importance
    plot_importance(model)
    pyplot.show()
    

    例如,以下是完整的代码清单,其中使用内置的plot_importance()函数绘制了Pima Indians数据集的特征重要性。

    # plot feature importance using built-in function
    from numpy import loadtxt
    from xgboost import XGBClassifier
    from xgboost import plot_importance
    from matplotlib import pyplot
    # load data
    dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
    # split data into X and y
    X = dataset[:,0:8]
    y = dataset[:,8]
    # fit model no training data
    model = XGBClassifier()
    model.fit(X, y)
    # plot feature importance
    plot_importance(model)
    pyplot.show()
    

    注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

    运行该示例将为我们提供更有用的条形图。

    您可以看到,要素是根据它们在F0至F7的输入数组(X)中的索引自动命名的。手动将这些索引映射到问题描述中的名称,可以看到该图显示F5(体重指数)具有最高的重要性,而F3(皮肤褶皱厚度)具有最低的重要性。

    XGBoost特征重要性评分的特征选择

    特征重要性评分可用于scikit-learn中的特征选择。这是通过使用SelectFromModel类完成的,该类采用一个模型,并且可以将数据集转换为具有选定要素的子集。此类可以采用预训练的模型,例如在整个训练数据集上进行训练的模型。然后,它可以使用阈值来确定要选择的特征。当您在SelectFromModel实例上调用transform()方法以一致地选择训练数据集和测试数据集上的相同要素时,将使用此阈值。

    在下面的示例中,我们首先训练,然后分别在整个训练数据集和测试数据集上评估XGBoost模型。使用从训练数据集计算出的特征重要性,然后将模型包装在SelectFromModel实例中。我们使用它来选择训练数据集上的特征,从选定的特征子集中训练模型,然后在测试集上评估模型,并遵循相同的特征选择方案。

    例如:

    # select features using threshold
    selection = SelectFromModel(model, 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)
    

    出于兴趣,我们可以测试多个阈值,以根据特征重要性选择特征。具体来说,每个输入变量的特征重要性,从本质上讲,使我们能够按重要性测试每个特征子集,从所有特征开始,到具有最重要特征的子集结束。

    下面提供了完整的代码清单:

    # use feature importance for feature selection
    from numpy import loadtxt
    from numpy import sort
    from xgboost import XGBClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.feature_selection import SelectFromModel
    # load data
    dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
    # split data into X and y
    X = dataset[:,0:8]
    Y = dataset[:,8]
    # split data into train and test sets
    X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=7)
    # fit model on all training data
    model = XGBClassifier()
    model.fit(X_train, y_train)
    # 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 = 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 = 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 1.0.2(可能还有其他版本),则XGBClassifier类中存在一个错误,该错误会导致错误:

    KeyError: 'weight'
    

    这可以通过使用自定义XGBClassifier类来解决,该类为coef_属性返回None。下面列出了完整的示例。

    # use feature importance for feature selection, with fix for xgboost 1.0.2
    from numpy import loadtxt
    from numpy import sort
    from xgboost import XGBClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.feature_selection import SelectFromModel
     
    # define custom class to fix bug in xgboost 1.0.2
    class MyXGBClassifier(XGBClassifier):
     @property
     def coef_(self):
      return None
     
    # load data
    dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
    # split data into X and y
    X = dataset[:,0:8]
    Y = dataset[:,8]
    # split data into train and test sets
    X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=7)
    # fit model on all training data
    model = MyXGBClassifier()
    model.fit(X_train, y_train)
    # make predictions for test data and evaluate
    predictions = model.predict(X_test)
    accuracy = accuracy_score(y_test, predictions)
    print("Accuracy: %.2f%%" % (accuracy * 100.0))
    # Fit model using each importance as a threshold
    thresholds = 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 = XGBClassifier()
     selection_model.fit(select_X_train, y_train)
     # eval model
     select_X_test = selection.transform(X_test)
     predictions = selection_model.predict(select_X_test)
     accuracy = accuracy_score(y_test, predictions)
     print("Thresh=%.3f, n=%d, Accuracy: %.2f%%" % (thresh, select_X_train.shape[1], accuracy*100.0))
    

    注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

    运行此示例将打印以下输出。

    Accuracy: 77.95%
    Thresh=0.071, n=8, Accuracy: 77.95%
    Thresh=0.073, n=7, Accuracy: 76.38%
    Thresh=0.084, n=6, Accuracy: 77.56%
    Thresh=0.090, n=5, Accuracy: 76.38%
    Thresh=0.128, n=4, Accuracy: 76.38%
    Thresh=0.160, n=3, Accuracy: 74.80%
    Thresh=0.186, n=2, Accuracy: 71.65%
    Thresh=0.208, n=1, Accuracy: 63.78%
    

    我们可以看到,模型的性能通常随所选特征的数量而降低。

    在此问题上,需要权衡测试集精度的特征,我们可以决定采用较不复杂的模型(较少的属性,例如n = 4),并接受估计精度的适度降低,从77.95%降至76.38%。

    这可能是对这么小的数据集的洗礼,但是对于更大的数据集并使用交叉验证作为模型评估方案可能是更有用的策略。

    作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习、深度学习、NLP、CV

    Blog: http://yishuihancheng.blog.csdn.net

    赞 赏 作 者

    更多阅读

    用 XGBoost 进行时间序列预测

    5分钟掌握 Python 随机爬山算法

    5分钟完全读懂关联规则挖掘算法

    特别推荐


    点击下方阅读原文加入社区会员

    展开全文
  • 特征重要性--feature_importance

    千次阅读 2020-12-03 23:00:45
    feature_importance的特征重要性There are indeed several ways to get feature "importances". As often, there is no strict consensus about what this word means.In scikit-learn, we implement the importance...

    feature_importance的特征重要性

    There are indeed several ways to get feature "importances". As often, there is no strict consensus about what this word means.

    In scikit-learn, we implement the importance as described in [1] (often cited, but unfortunately rarely read...). It is sometimes called "gini importance" or "mean decrease impurity" and is defined as the total decrease in node impurity (weighted by the probability of reaching that node (which is approximated by the proportion of samples reaching that node)) averaged over all trees of the ensemble.

    In the literature or in some other packages, you can also find feature importances implemented as the "mean decrease accuracy".

    Basically, the idea is to measure the decrease in accuracy on OOB data when you randomly permute the values for that feature. If the decrease is low, then the feature is not important, and vice-versa.

    (Note that both algorithms are available in the randomForest R package.)

    [1]: Breiman, Friedman, "Classification and regression trees", 1984.

    其实sklearn的作者说并没有给出feature importance的具体定义。

    feature importance有两种常用实现思路:

    (1) mean decrease in node impurity:

    feature importance is calculated by looking at the splits of each tree.

    The importance of the splitting variable is proportional to the improvement to the gini index given by thatsplit and it is accumulated (for each variable) over all the trees in the forest.

    就是计算每棵树的每个划分特征在划分准则(gini或者entropy)上的提升,然后对聚合所有树得到特征权重

    (2) mean decrease in accuracy:

    This method, proposed in the original paper, passes the OOB samples down the tree and records prediction accuracy.

    A variable is then selected and its values in the OOB samples are randomly permuted. OOB samples are passed down the tree and accuracy is computed again.

    A decrease in accuracy obtained by this permutation is averaged over all trees for each variable and it provides the importance of that variable (the higher the decreas the higher the importance).

    简单来说,如果该特征非常的重要,那么稍微改变一点它的值,就会对模型造成很大的影响。

    自己造数据太麻烦,可以直接在OOB数据集对该维度的特征数据进行打乱,重新训练测试,打乱前的准确率减去打乱后的准确率就是该特征的重要度。该方法又叫permute。

    以random forest为例

    以random forest为例,feature importance特性有助于模型的可解释性。简单考虑下,就算在解释性很强的决策树模型中,如果树过于庞大,人类也很难解释它做出的结果。

    随机森林通常会有上百棵树组成,更加难以解释。好在我们可以找到那些特征是更加重要的,从而辅助我们解释模型。更加重要的是可以剔除一些不重要的特征,降低杂讯。比起pca降维后的结果,更具有人类的可理解性。

    sklearn中实现的是第一种方法【mean decrease in node impurity】实现的。使用iris数据集我们来看下效果。

    首先,对于单棵决策树,权重是怎么计算的呢?

    iris = load_iris()

    X = iris.data

    y = iris.target

    dt = DecisionTreeClassifier(criterion='entropy', max_leaf_nodes=3)

    dt.fit(X, y)

    使用Graphviz画出生成的决策树

    sklearn中tree的代码是用Cython编写的,具体这部分的源码在compute_feature_importances方法中

    根据上面生成的树,我们计算特征2和特征3的权重

    特征2: 1.585*150 - 0*50 - 1.0*100 = 137.35

    特征3: 1.0*100 - 0.445*54 - 0.151*46 = 69.024

    归一化之后得到[0, 0, 0.665, 0.335] 我们算的结果和sklearn输出的结果相同。

    得到每课树的特征重要度向量之后,就加和平均得到结果,具体代码如下:

    def feature_importances_(self):"""Return the feature importances (the higher, the more important the

    feature).

    Returns-------feature_importances_ : array, shape=[n_features]""" check_is_fitted(self, 'n_outputs_')if self.estimators_ is None or len(self.estimators_) == 0:

    raise ValueError("Estimator not fitted,"

    "call `fit` before `feature_importances_`.")

    all_importances= Parallel(n_jobs=self.n_jobs, backend="threading")(

    delayed(getattr)(tree,'feature_importances_')for tree inself.estimators_)

    returnsum(all_importances) / len(self.estimators_)

    View Code

    利用permutation importance挑选变量

    为什么引入置换重要性:

    决策树适合于寻找也可以解释的非线性预测规则,尽管它们的不稳定性和缺乏平滑性引起了人们的关注(Hastie等,2001)。RandomForest(RF; Breiman,2001)分类器旨在克服这些问题,并且由于将决策树的可解释性与现代学习算法(例如人工神经网络和SVM)的性能相结合而受到广泛欢迎。RF的作者提出了两种用于特征排名的度量,即变量重要性(VI)和基尼重要性(GI)。最近的一项研究表明,如果预测变量是分类的,则这两种方法都偏向于采用更多类别的变量(Strobl等,2007)。这篇文章的作者将偏爱归因于使用bootstrap采样和吉尼分裂准则来训练分类树和回归树(CART; Breiman等,1984)。在文献中,多年来已经报道了由基尼系数引起的偏差(Bourguignon,1979; Pyatt等,1980)。),并且通常不仅会影响分类变量,还会影响分组变量(即,将变量聚类的值分成多个独立的组,例如多峰高斯分布)。在生物学中,预测因子通常具有分类或分组的值(例如,微阵列和序列突变)。Strobl等。(2007)提出了一种新的算法(cforest),用于基于条件推理树构建RF模型(Hothorn等,2006),并计算可校正偏差的VI值。

    关于生物学数据的学习通常具有大量特征和少量可用样本的特征。通常的做法是在模型拟合之前滤除不重要的特征,例如,通过拒绝与结果最少相关的特征。互信息(MI)是在这种情况下经常使用的一种关联度量(Guyon和Elisseeff,2003年)。它与基尼指数密切相关,并且事实证明,它也偏向于具有更多类别的变量(Achard等,2005)。

    们在构建树类模型(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+)进行建模。

    参考博客:

    展开全文
  • 在使用GBDT、RF、Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法 一 计算特征重要性方法 首先,目前计算特征重要性计算方法主要有两个方面: ...

    在使用GBDT、RF、Xgboost等树类模型建模时,往往可以通过 feature_importance 来返回特征重要性,各模型输出特征重要性的原理与方法

    一 计算特征重要性方法

    首先,目前计算特征重要性计算方法主要有两个方面:

    1.1 训练过程中计算

    训练过程中通过记录特征的分裂总次数、总/平均信息增益来对特征重要性进行量化。例如实际工程中我们会用特征在整个GBDT、XgBoost里面被使用的次数或者带来的总/平均信息增益来给特征重要度打分,最后进行排序。由于本身Ensemble模型在选择特征分裂时带有一定随机性,一般会跑多个模型然后把特征重要性求平均后排序。

    作为单个决策树模型,在模型建立时实际上是寻找到某个特征合适的分割点。这个信息可以作为衡量所有特征重要性的一个指标。

    基本思路如下:
    如果一个特征被选为分割点的次数越多,那么这个特征的重要性就越强。这个理念可以被推广到集成算法中,只要将每棵树的特征重要性进行简单的平均即可。

    分别根据特征1和特征4进行分割,显然x1出现的次数最多,这里不考虑先分割和后分割的情况,只考虑每次分割属性出现的次数。

    计算得:
    x1的特征重要度:出现在2棵树上,两棵树一共分裂了6次,x1出现了3次。
    x1特征重要度 = 3/6 = 1/2
    x2的特征重要度= 4/6 = 2/3
    x3的特征重要度= 3/6 = 1/2


    x4的特征重要度: 出现在1棵树上,一个树分裂了3次,x4出现了1次。
    x4的特征重要度= 1/3

    根据特征重要度进行特征选择。

     

    1.2 训练后使用OOB(Out of Bag)数据计算

    第二种方式是训练好模型之后,用Out of Bag(或称Test)数据进行特征重要性的量化计算。具体来说,先用训练好的模型对OOB数据进行打分,计算出AUC或其他业务定义的评估指标;接着对OOB数据中的每个特征:

    (1)随机shuffle当前特征的取值;

    (2)重新对当前数据进行打分,计算评估指标;

    (3)计算指标变化率

    按照上面方式,对每个特征都会得到一个变化率,最后按照变化率排序来量化特征重要性。

    延伸到 DNN 对特征重要性判定:

    DNN不像Boosting这类模型那样存在所谓的分裂次数与信息增益,就需要使用第二种方式,对每个特征进行随机shuffle,观察模型指标的变化,最后按照变化率进行排序。比如AUC下滑率,下滑的越多说明当前这个指标越重要。当然,实际操作中需要结合业务经验先指定一个候选变量池,对这部分变量计算重要度,不然计算开销太大。

     

    二. 树模型特征重要性判定

    2.1 Random Foreast

    • 袋外数据错误率(可参考OOB特征选择方法)
    • 基尼指数(和GBDT的方法相同)

    随机森林特征重要性评定可参考:https://blog.csdn.net/zjuPeco/article/details/77371645?locationNum=7&fps=1

    2.2 GBDT

    基尼指数

    在sklearn中,GBDT和RF的特征重要性计算方法是相同的,都是基于单棵树计算每个特征的重要性,探究每个特征在每棵树上做了多少的贡献,再取个平均值。 


    2.3 XGBoost

    xgboost实现中Booster类get_score方法输出特征重要性,其中importance_type参数支持三种特征重要性的计算方法:

    • importance_type=weight(默认):the number of times a feature is used to split the data across all trees. 特征重要性使用特征在所有树中作为划分属性的次数。
    • importance_type=gain:is the average gain of splits which use the feature. 特征重要性使用特征在作为划分属性带来的平均增益。
    • importance_type=cover:is the average coverage of splits which use the feature where coverage is defined as the number of samples affected by the split. 使用该特作为分割影响的平均样本数。——可以理解为被分到该节点的样本的二阶导数之和,而特征度量的标准就是平均的coverage值。
    • importance_type=total_gain: the total gain across all splits the feature is used in.
    • importance_type=total_cover: the total coverage across all splits the feature is used in

    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值。

     

    下面就结合这张图,解释下各指标含义: 

    1. weight:  {‘f0’: 1, ‘f1’: 2}
    在所有树中,某特征被用来分裂节点的次数,在本例中,可见分裂第1个节点时用到f0,分裂第2,3个节点时用到f1,所以weight_f0 = 1, weight_f1 = 2


    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表示在所有树中,某特征在每次分裂节点时处理(覆盖)的所有样例的数量。


    3. cover:  {‘f0’: 10.0, ‘f1’: 4.0}
    cover = total_cover / weight,在本例中,cover_f0 = 10 / 1,cover_f1 = 8 / 2 = 4.


    4. total_gain:  {‘f0’: 0.265151441, ‘f1’: 0.75000003}
    在所有树中,某特征在每次分裂节点时带来的总增益,如果用熵或基尼不纯衡量分裂前后的信息量分别为i0和i1,则增益为(i0 - i1)。


    5. gain:  {‘f0’: 0.265151441, ‘f1’: 0.375000015}

    gain就是特征用于分割的平均增益 ,gain = total_gain / weight,在本例中,gain_f0 = 0.265151441 / 1,gain_f1 = 75000003 / 2 = 375000015.

    在平时的使用中,多用total_gain来对特征重要性进行排序。

     

    2.4 Lightgbm

    split:result contains numbers of times the feature is used in a mode (特征重要性使用特征在所有树中作为划分属性的次数)
    gain:result contains total gains of splits which use the feature (使用该特征作为分割带来的总增益)


     

    参考文献

    1. https://blog.csdn.net/tinkle181129/article/details/80231871
    2. https://blog.csdn.net/lz_peter/article/details/85010931
    展开全文
  • LightGBM特征重要性画图

    千次阅读 2021-04-01 10:10:49
    lightgbm官方文档 前言 基于树的模型可以用来评估特征重要性。 在本博客中,我将使用LightGBM中的GBDT模型来评估特性重要性的步骤。 LightGBM是由微软发布的高精度和高速度梯度增强框架(一些测试表明LightGBM...
  • 特征重要性判断(一)----决策树

    千次阅读 2020-10-22 17:58:58
    y_train) # 输出每个特征的重要性 print(classification_tree.feature_importances_) # 产生预测 print(classification_tree.predict(x_test)) 总结 使用决策树也是可以做特征重要性分析的:按照划分决策树的过程中...
  • 随机森林模型介绍: 随机森林模型不仅在预测问题上有着广泛的应用,在特征选择中也有常用。 随机森林是以决策树为基学习器的集成学习算法。随机森林非常简单,易于实现,计算开销...和为1,特征重要性度数组中,数值越
  • 随机森林计算特征重要性The feature importance describes which features are relevant. It can help with a better understanding of the solved problem and sometimes lead to model improvement by utilizing ...
  • 机器学习 | 特征重要性判断

    万次阅读 2019-05-12 20:34:13
    聊聊feature_importances_1 背景2 ...在运用树模型建模的时候,常用的一个sklearn的子库就是看特征重要性,也就是feature_importances_,下面将从原理和Python代码实现两个角度来聊一聊! 2 原理 待补充 3 Python...
  • 作者:杰少查看NN模型特征重要性的技巧简 介我们都知道树模型的特征重要性是非常容易绘制出来的,只需要直接调用树模型自带的API即可以得到在树模型中每个特征的重要性,那么对于神经网络我们该如...
  • 博客里只给出一下论文中介绍的方法这一章节,论文中前面介绍了神经网络中特征重要性评估方法的背景与发展,感兴趣的可以去阅读原论文。 3. APPROACH 本研究提出了对于深度神经网络混合的特征排序算法,优势...
  • 1.决策树使用基尼系数(GI)和信息增益(IG)为决策树计算特征重要性。(1)信息增益(information gain)假定当前样本集合D中第k类样本所占我的比例为,则D的信息熵为 (1)的值越小,则D的纯度越高。假定离散属性a...
  • 特征筛选:重要性评估

    千次阅读 2020-07-22 21:50:09
    特征筛选的目的: ...有区分(Informative) 特征之间相互独立(Independent) 简单易于理解(Simple) sklearn中包含feature_select模块,基本都可以实现特征选择的功能。通常复杂模型有 fe
  • 在建立模型之前,特征重要性能够帮助训练模型,防止过拟合,提升模型的RUC效果。 建立模型之后,特征重要性能够增强模型(集成模型 非深度学习模型)的可解释性,帮助建立模型信任、做出现实意义上的决策。 建模前...
  • 随机森林的特征重要性原理

    万次阅读 2018-05-25 17:04:39
    答:在随机森林中某个特征X的重要性的计算方法如下:1:对于随机森林中的每一颗决策树,使用相应的OOB(袋外数据)数据来计算它的袋外数据误差,记为errOOB1.2: 随机地对袋外数据OOB所有样本的特征X加入噪声干扰(就可以...
  •   2019-02-12 23:53:35 ...通常,除了想知道我们的机器学习模型的房价预测是什么之外,我们还想知道为什么它是这么高/低,以及哪些特征在确定预测时最重要。另一个例子是预测客户流失 - 拥有一个...
  • 逻辑回归特征重要性查看

    千次阅读 2020-01-10 19:26:23
    逻辑回归特征重要性查看 LR模型也就是逻辑回归模型,作为一个简单的常用的模型,其有非常多的优点,除了模型简单,容易实现分布式, 还有一个重要的优点就是模型的可解释性非常好。因为每个特征都对应一个模型参数wi...
  • 决策树的特征重要性

    千次阅读 2020-01-03 14:54:55
    决策树的特征重要性 接上一篇 print("Feature importances:\n{}".format(tree.feature_importances_)) def plot_feature_importances_cancer(model): n_features = cancer.data.shape[1] plt.barh(range(n_...
  • 在复习特征重要性时候,考虑到我们在使用GBDT ,RF,Xgboost 等树类模型建模时,往往可以通过feature_importance 来返回特征重要性,一下是各模型输出特征重要性的原理和方法。 1 计算特征重要性方法 1-1 训练过程...
  • 【算法】关于xgboost特征重要性的评估

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

    千次阅读 2020-06-14 09:04:53
    特征选择和数据清理应该是模型设计的第一步,也是最重要的一步。 特征选择是您自动或手动选择那些对您感兴趣的预测变量或输出贡献最大的特征的过程。 数据中具有不相关的特征会降低模型的准确,并
  • 可视化随机森林的特征重要性

    千次阅读 2019-12-22 16:54:28
    可视化随机森林的特征重要性 # 查看随机森林的特征重要性 import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestClassifier from sklearn import datasets ​ iris = ...
  • 随机森林如何评估特征重要性

    千次阅读 2019-03-11 11:56:33
    集成学习模型的一大特点是可以输出特征重要性特征重要性能够在一定程度上辅助我们对特征进行筛选,从而使得模型的鲁棒性更好。 随机森林中进行特征重要性的评估思想为: 判断每个特征在随机森林中的每颗树上做了...
  • 随机森林(RF)简介 只要了解决策树的算法,那么随机森林是相当容易理解的。... 利用这d个特征分别对样本集进行划分,找到最佳的划分特征(可用基尼系数、增益率或者信息增益判别) 重复步骤1到步骤...
  • 利用随机森林对特征重要性进行评估

    万次阅读 多人点赞 2018-08-24 09:30:53
    本文是对随机森林如何用在特征选择上做一个简单的介绍。 随机森林(RF)简介 只要了解决策树的算法,那么随机森林是相当容易理解的。随机森林的算法可以用如下几个步骤概括: 用有抽样放回的方法...
  • 树模型特征重要性评估方法

    万次阅读 2018-05-07 21:28:33
    前言 在特征的选择过程中,如果学习器...各种模型的特征重要性计算 Random Forests 袋外数据错误率评估 RF的数据是boostrap的有放回采样,形成了袋外数据。因此可以采用袋外数据(OOB)错误率进行特征重要...
  • 使用像梯度增强这样的决策树方法的集合的一个好处是,它们可以从经过训练的预测模型中自动提供特征重要性的估计。 在这篇文章中,您将发现如何使用Python中的XGBoost库估计特性对于预测建模问题的重要性。 读完这篇...
  •   本文详细介绍在Python中,实现随机森林(Random Forest,RF)回归与变量重要性分析、排序的代码编写与分析过程。其中,关于基于MATLAB实现同样过程的代码与实战,大家可以点击查看这篇博客1。   本文分为两...
  • 获取AdaBoost模型的重要特征

    千次阅读 2018-11-06 09:35:35
    获取AdaBoost模型的重要特征 模型训练之后,想要得到比较重要特征,可以通过python的sklearn包来实现。 python实现代码如下所示:  AdaBoostClassifier.py # -*- coding: utf-8 -*- import IOUtil as iou ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 317,068
精华内容 126,827
关键字:

特征重要性分析

友情链接: SSCOM.zip