【问题标题】:how can I print variable importance in gbm function?如何在 gbm 函数中打印变量重要性?
【发布时间】:2017-07-03 11:14:17
【问题描述】:

我使用gbm 函数来实现梯度提升。我想进行分类。 之后,我使用varImp() 函数打印梯度提升建模中的变量重要性。 但是......只有 4 个变量的重要性不为零。我的大数据里有371个变量....对吗? 这是我的代码和结果。

>asd<-read.csv("bigdatafile.csv",header=TRUE)
>asd1<-gbm(TARGET~.,n.trees=50,distribution="adaboost", verbose=TRUE,interaction.depth = 1,data=asd)

Iter   TrainDeviance   ValidDeviance   StepSize   Improve
 1        0.5840             nan     0.0010    0.0011
 2        0.5829             nan     0.0010    0.0011
 3        0.5817             nan     0.0010    0.0011
 4        0.5806             nan     0.0010    0.0011
 5        0.5795             nan     0.0010    0.0011
 6        0.5783             nan     0.0010    0.0011
 7        0.5772             nan     0.0010    0.0011
 8        0.5761             nan     0.0010    0.0011
 9        0.5750             nan     0.0010    0.0011
10        0.5738             nan     0.0010    0.0011
20        0.5629             nan     0.0010    0.0011
40        0.5421             nan     0.0010    0.0010
50        0.5321             nan     0.0010    0.0010

>varImp(asd1,numTrees = 50)
                    Overall
CA0000801           0.00000
AS0000138           0.00000
AS0000140           0.00000
A1                  0.00000
PROFILE_CODE        0.00000
A2                  0.00000
CB_thinfile2        0.00000
SP_thinfile2        0.00000
thinfile1           0.00000
EW0001901           0.00000
EW0020901           0.00000
EH0001801           0.00000
BS_Seg1_Score       0.00000
BS_Seg2_Score       0.00000
LA0000106           0.00000
EW0001903           0.00000
EW0002801           0.00000
EW0002902           0.00000
EW0002903           0.00000
EW0002904           0.00000
EW0002906           0.00000
LA0300104_SP       56.19052
ASMGRD2          2486.12715
MIX_GRD          2211.03780
P71010401_1         0.00000
PS0000265           0.00000
P11021100           0.00000
PE0000123           0.00000

有 371 个变量。所以上面的结果,我没有写其他变量。这一切的重要性都为零。

TARGET 是目标变量。我生产了 50 棵树。目标变量有两个级别。所以我使用了adaboost。

我的代码有错误吗???有一点非零变量....

感谢您的回复。

【问题讨论】:

  • 一切都取决于数据,这里没有任何迹象表明这可能不正确。数据中的四个特征可以正确分类目标。这就是为什么所有其他人的重要性都为零。
  • 我同意@discipulus。该模型选择了这些变量来预测结果。您可以尝试调整超参数以查看变量重要性是否发生变化。如果您从数据中取出这 4 个变量,您可以强制模型考虑其他变量。如果您的目标是二进制,可以尝试“伯努利”或“二项式”分布。

标签: r gbm boosting


【解决方案1】:

您不能使用 importance()varImp() 这仅适用于随机森林。

但是,您可以使用 gbm 包中的 summary.gbm

例如:

summary.gbm(boost_model)

输出将如下所示:

【讨论】:

    【解决方案2】:

    在您的代码中,n.trees 非常低,收缩率非常高。 只需调整这两个因素。

    1. n.trees 是树的数量。 N 增加 N 会减少训练集上的误差,但设置得太高可能会导致过拟合。
    2. interaction.depth(每棵树的最大节点数)是它必须在树上执行的拆分数(从单个节点开始)。
    3. 收缩率被视为学习率。收缩通常用于岭回归,它将回归系数降低到零,从而减少潜在不稳定回归系数的影响。 我建议对所有超过 10,000 条记录的数据集使用 0.1。 还!种植多棵树时使用较小的收缩率。

    如果您在 n.trees 中输入 1,000,在收缩中输入 0.1,您可以获得不同的值。 如果您想知道 gbm 中每个变量的相对影响,请使用 summary.gbm() 而不是 varImp()。当然,varImp() 是一个很好的函数。但我推荐 summary.gbm()。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2015-06-20
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 2023-02-03
      相关资源
      最近更新 更多