Tôi sử dụng gói GBM R có lẽ là lựa chọn đầu tiên của tôi cho mô hình dự đoán. Có rất nhiều điều tuyệt vời về thuật toán này nhưng thuật toán "xấu" là tôi không thể dễ dàng sử dụng mã mô hình để ghi dữ liệu mới bên ngoài R. Tôi muốn viết mã có thể được sử dụng trong SAS hoặc hệ thống khác (tôi sẽ bắt đầu bằng SAS (không có quyền truy cập vào IML)).Thế hệ quy tắc GBM - Tư vấn mã hóa
phép nói rằng tôi có tập dữ liệu sau đây (từ GBM bằng tay) và mã model:
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
Bây giờ tôi có thể nhìn thấy cây cối cá nhân sử dụng pretty.gbm.tree
như trong
pretty.gbm.tree(gbm1,i.tree = 1)[1:7]
trong đó sản lượng
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
Trang hướng dẫn 18 hiển thị như sau:
Dựa trên hướng dẫn, chia đầu tiên xảy ra trên biến thứ 3 (không có trụ sở tại đầu ra này) mà là gbm1$var.names[3]
"X3". Biến là yếu tố đặt hàng.
types<-lapply (lapply(data[,gbm1$var.names],class), function(i) ifelse (strsplit(i[1]," ")[1]=="ordered","ordered",i))
types[3]
Vì vậy, chia tay là 1,5 có nghĩa là giá trị 'd và c' levels[[3]][1:2.5]
(còn số không dựa) chia tách đến nút trái và những người khác levels[[3]][3:4]
đi về bên phải.
Tiếp theo, sự cai trị tiếp tục với một sự chia rẽ tại gbm1$var.names[2]
như được biểu thị bởi SplitVar = 1 ở hàng lập chỉ mục 1.
Có ai viết bất cứ điều gì để di chuyển qua cấu trúc dữ liệu này (cho mỗi cây), xây dựng các nguyên tắc như :
"Nếu X3 trong ('d', 'c') và X2 < 1,0309565491 và X3 trong ('d') sau đó scoreTreeOne = -,0102671518"
đó là cách tôi nghĩ rằng sự cai trị đầu tiên từ này cây đọc.
Hoặc có lời khuyên nào về cách thực hiện tốt nhất điều này?
Tôi nghĩ rằng IML trong SAS có thể cung cấp giải pháp. Tuy nhiên, tôi không thực sự hiểu R ở đây. Bạn có thể giải thích rõ hơn về mô hình? –
Xin chào Robbie- Không có quyền truy cập vào IML. Đang tìm bước dữ liệu. Tôi đã thêm mô tả nội dung cột cho pretty.gbm.tree. –
Có thể bạn có thể xem [rattle] (http://cran.r-project.org/web/packages/rattle/index.html) để thực hiện chức năng như vậy cho cây quyết định (như được thảo luận trong [Cross Validated] (http://stats.stackexchange.com/a/12089/930)). Tôi đã không kiểm tra bản thân mình nếu điều này sẽ áp dụng với đầu ra 'gbm'. – chl