2017-02-14 79 views
1

我用gbm函数来实现梯度增强。我想分类。 之后,我使用varImp()函数在梯度增强建模中打印变量重要性。 但是......只有4个变量具有非零重要性。我的大数据中有371个变量......是不是? 这是我的代码和结果。如何在gbm函数中打印变量重要性?

>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 
PE000.00000 

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

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

在我的代码中是否有错?有一些非零变量....

谢谢你的回复。

+0

全部取决于数据,这里没有任何内容显示这可能不正确。数据中的四项功能可以正确分类目标。这就是为什么所有其他人都没有重要性。 – discipulus

+0

我同意@discipulus。该模型选择这些变量来预测结果。您可以尝试调整超参数以查看变量重要性是否发生变化。如果您从数据中提取这4个变量,您可以强制模型考虑其他变量。如果你的目标是二进制,也许尝试“伯努利”或“二项式”分布。 – syebill

回答

0

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

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

如果您在收缩中输入1000个树木,则可以得到不同的值。 如果您想知道每个变量在gbm中的相对影响,请使用summary.gbm()而不是varImp()。当然,varImp()是很好的函数。但我建议summary.gbm()。

祝你好运。