2017-10-11 91 views
1

無論我們選擇什麼方法('cv', 'OOB' or 'test'),我們選擇合適的gbm對象中樹的數量始終爲3*n.trees數據集irisR gbm爲什麼fit tree的長度始終是數據集iris的n.trees的3倍

是因爲iris數據集有一個3級目標分類變量。

如果是與目標變量具有值A,B和C,爲所述第一樹,第二樹B,第三樹C和第四樹甲再次?

或者如果n.trees設置爲100,則前100棵樹用於A,第2 100棵樹用於B,最後100棵用於C?

fit = gbm(data=iris, Species ~., shrinkage = 0.2, n.trees = 50, cv.folds = 2) 

best.iter = gbm.perf(fit, method = 'cv') 

fit = gbm(data=iris, Species ~., shrinkage = 0.2, n.trees = 40, train.fraction = 0.8) 

best.iter = gbm.perf(fit, method = 'test') 

fit = gbm(data=iris, Species ~., shrinkage = 0.2, n.trees = 50) 

best.iter = gbm.perf(fit, method = 'OOB') 

回答

1

你說得對,樹的數量是3倍,因爲你試圖適合的公式的左邊的因子。 R會將其分解爲公式左側的3個獨立變量,您將得到3個單獨的擬合。

如果您篩選數據以只得到兩個層面的因素,你將最終獲得2個* n.trees代替。

library(gbm) 
iris.sub <- iris[iris$Species != "setosa", ] 
iris.sub$Species <- factor(as.character(iris.sub$Species)) 
levels(iris.sub$Species) 
fit = gbm(data=iris.sub, Species ~., shrinkage = 0.2, n.trees = 50, cv.folds = 2, distribution = "multinomial") 
length(fit$trees) 

至於數據是如何在gbm.object內舉辦,我無法找出哪些責令樹木英寸

+0

我還發現,如果'distribution'被選爲'伯努利',那麼它只有1 * n.trees,並且響應必須被重新編碼爲0和1。 – John

相關問題