如何在gbm函数中打印变量重要性?

时间:2017-02-14 23:57:40

标签: r gbm boosting

我使用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棵树。 TARGET变量有两个级别。所以我用了adaboost。

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

感谢您的回复。

2 个答案:

答案 0 :(得分:0)

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

  1. n.trees是树的数量。 N增加N会减少训练集上的误差,但将其设置得过高可能会导致过度拟合。
  2. interaction.depth(每棵树的最大节点数)是它必须在树上执行的拆分数(从单个节点开始)。
  3. 缩小被认为是学习率。收缩通常用于岭回归,其中回归系数降低到零,从而减少潜在不稳定回归系数的影响。 我建议对所有超过10,000条记录的数据集使用0.1。 也!在种植许多树木时使用小的收缩。
  4. 如果您在n.trees&amp;中输入1,000。 0.1收缩,你可以得到不同的价值。 如果你想知道每个变量在gbm中的相对影响,请使用summary.gbm()而不是varImp()。当然,varImp()是很好的功能。但我推荐summary.gbm()。

    祝你好运。

答案 1 :(得分:0)

您不能使用重要性()或varImp(),这仅适用于随机森林。

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

例如: summary.gbm(boost_model)

输出将如下所示: [1]:https://i.stack.imgur.com/P7h3B.png