2017-02-14 50 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()。

祝你好運。