मैं अनुमानित मॉडलिंग के लिए शायद मेरी पहली पसंद के रूप में आर पैकेज जीबीएम का उपयोग करता हूं। इस एल्गोरिदम के बारे में बहुत सी महान चीजें हैं लेकिन एक "बुरा" यह है कि मैं आर के बाहर नए डेटा को स्कोर करने के लिए आसानी से मॉडल कोड का उपयोग नहीं कर सकता। मैं कोड लिखना चाहता हूं जिसका उपयोग एसएएस या अन्य सिस्टम में किया जा सकता है (मैं साथ शुरू करूंगा एसएएस (आईएमएल तक कोई पहुंच नहीं))।जीबीएम नियम जनरेशन - कोडिंग सलाह
चलें कहते हैं कि मैं निम्नलिखित डेटा सेट और मॉडल कोड (जीबीएम मैनुअल से):
library(gbm)
set.seed(1234)
N <- 1000
X1 <- runif(N)
X2 <- 2*runif(N)
X3 <- ordered(sample(letters[1:4],N,replace=TRUE),levels=letters[4:1])
X4 <- factor(sample(letters[1:6],N,replace=TRUE))
X5 <- factor(sample(letters[1:3],N,replace=TRUE))
X6 <- 3*runif(N)
mu <- c(-1,0,1,2)[as.numeric(X3)]
SNR <- 10 # signal-to-noise ratio
Y <- X1**1.5 + 2 * (X2**.5) + mu
sigma <- sqrt(var(Y)/SNR)
Y <- Y + rnorm(N,0,sigma)
# introduce some missing values
#X1[sample(1:N,size=500)] <- NA
X4[sample(1:N,size=300)] <- NA
X3[sample(1:N,size=30)] <- NA
data <- data.frame(Y=Y,X1=X1,X2=X2,X3=X3,X4=X4,X5=X5,X6=X6)
# fit initial model
gbm1 <- gbm(Y~X1+X2+X3+X4+X5+X6, # formula
data=data, # dataset
var.monotone=c(0,0,0,0,0,0), # -1: monotone decrease,
distribution="gaussian",
n.trees=2, # number of trees
shrinkage=0.005, # shrinkage or learning rate,
# 0.001 to 0.1 usually work
interaction.depth=5, # 1: additive model, 2: two-way interactions, etc.
bag.fraction = 1, # subsampling fraction, 0.5 is probably best
train.fraction = 1, # fraction of data for training,
# first train.fraction*N used for training
n.minobsinnode = 10, # minimum total weight needed in each node
cv.folds = 5, # do 5-fold cross-validation
keep.data=TRUE, # keep a copy of the dataset with the object
verbose=TRUE) # print out progress
अब मैं
pretty.gbm.tree(gbm1,i.tree = 1)[1:7]
में जो
पैदावार के रूप में व्यक्तिगतpretty.gbm.tree
का उपयोग कर पेड़ देख सकते हैं
SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight
0 2 1.5000000000 1 8 15 983.34315 1000
1 1 1.0309565491 2 6 7 190.62220 501
2 2 0.5000000000 3 4 5 75.85130 277
3 -1 -0.0102671518 -1 -1 -1 0.00000 139
4 -1 -0.0050342273 -1 -1 -1 0.00000 138
5 -1 -0.0076601353 -1 -1 -1 0.00000 277
6 -1 -0.0014569934 -1 -1 -1 0.00000 224
7 -1 -0.0048866747 -1 -1 -1 0.00000 501
8 1 0.6015416372 9 10 14 160.97007 469
9 -1 0.0007403551 -1 -1 -1 0.00000 142
10 2 2.5000000000 11 12 13 85.54573 327
11 -1 0.0046278704 -1 -1 -1 0.00000 168
12 -1 0.0097445692 -1 -1 -1 0.00000 159
13 -1 0.0071158065 -1 -1 -1 0.00000 327
14 -1 0.0051854993 -1 -1 -1 0.00000 469
15 -1 0.0005408284 -1 -1 -1 0.00000 30
मैनुअल पृष्ठ 18 निम्नलिखित दिखाता है:
मैनुअल के आधार पर, पहले विभाजन 3 चर (शून्य इस उत्पादन में स्थित है), जो है gbm1$var.names[3]
"X3" पर होता है। परिवर्तनीय आदेश कारक है।
types<-lapply (lapply(data[,gbm1$var.names],class), function(i) ifelse (strsplit(i[1]," ")[1]=="ordered","ordered",i))
types[3]
तो, विभाजन मान 'घ और ग' levels[[3]][1:2.5]
(भी आधारित शून्य) छोड़ दिया नोड और दूसरों के लिए विभाजन सही करने के लिए जाना levels[[3]][3:4]
अर्थ 1.5 पर है।
इसके बाद, नियम के रूप में पंक्ति में SplitVar = 1 से निरूपित किया 1.
किसी को भी (हर एक पेड़ के लिए) इस डेटा संरचना के माध्यम से स्थानांतरित करने के लिए कुछ भी लिखा गया है अनुक्रमित gbm1$var.names[2]
पर एक विभाजन के साथ जारी है, इस तरह के रूप नियमों का निर्माण :
"अगर में ('प', 'सी') और X2 < १.०३०९५६५४९१ और में ('प') X3 X3 तो scoreTreeOne = -०.०१०२६७१५१८"
है जो कि कैसे मैं इस से पहले नियम लगता है पेड़ पढ़ता है।
या कोई सलाह है कि यह कैसे करना है?
मुझे लगता है कि एसएएस में आईएमएल समाधान प्रदान कर सकता है। हालांकि, मैं वास्तव में यहां आर को समझ नहीं पा रहा हूं। क्या आप पैटर्न के बारे में अधिक स्पष्ट रूप से व्याख्या कर सकते हैं? –
हाय रॉबी- आईएमएल तक कोई पहुंच नहीं। एक डेटा कदम खोज रहे हैं। मैंने pretty.gbm.tree के लिए कॉलम सामग्री का विवरण जोड़ा। –
शायद आप [rattle] (http://cran.r-project.org/web/packages/rattle/index.html) पर एक नज़र डालें जो निर्णय पेड़ के लिए ऐसी कार्यक्षमता लागू करता है (जैसा कि [क्रॉस मान्य] पर चर्चा की गई है] (http://stats.stackexchange.com/a/12089/930))। मैंने खुद को जांच नहीं लिया अगर यह 'जीबीएम' आउटपुट के साथ लागू होगा। – chl