2016-12-05 25 views
0

我試圖限制部分依賴關係圖的x軸(以便有效區域得到放大)。我嘗試過使用xlim選項,但沒有奏效。限制gdm圖上pdp圖的軸範圍R

我創建了一個簡單的例子來重現問題:

library(gbm) 

xdata <- iris 

# reformulate problem as binary classification 
xdata$Species <- as.character(xdata$Species) 
change.classes <- function(prev) { 
    if (prev == 'setosa') { 
    return(1) 
    } 
    else return(0) 
} 
ydata <- as.integer(sapply(xdata$Species, change.classes)) 
xdata$Species <- NULL 

# train gbm model 
set.seed(250) 
fit <- gbm(ydata ~ ., data = xdata, 
      distribution = 'bernoulli', 
      n.trees = 100, 
      interaction.depth = 3, 
      n.minobsinnode = 10, 
      shrinkage = 0.03, 
      bag.fraction = 0.5, 
      train.fraction = 1.0) 

# plot partial dependency plot 
plot.gbm(fit, i.var = "Petal.Length", n.trees = 95, xlim = c(2,3)) 

正如你可以看到下面的圖片image的X - 軸的範圍從1到7覆蓋數據集的所有值,儘管我已經設定XLIM。

如何讓xlim正常工作(並將圖形限制在2到3之間的範圍內)?或者,有沒有其他方法可以實現這一目標?

回答

2

我不知道爲什麼xlim參數在此處被忽略,因爲它的預期效果與gbm幫助中的示例一致。無論如何,您可以使用return.grid參數plot.gbm來獲取用於該圖的x和y值,然後創建您自己的圖。例如:

fit.dat = plot(fit, i.var="Petal.Length", n.trees=95, return.grid=TRUE) 

plot(fit.dat$Petal.Length, fit.dat$y, type="l", xlim=c(2,3)) 
+0

酷,謝謝。也許xlim不工作是一個錯誤?不知道如何檢查和/或去哪裏提交。 – Karsus

+0

你可以到[Github上的'gbm'包開發頁面](https://github.com/harrysouthworth/gbm/issues)並將其作爲'issues'選項卡中的潛在錯誤提交。 – eipi10

+0

我看了一下gbm倉庫,他們有一個[pull request](https://github.com/gbm-developers/gbm/pull/119)修復了這個問題,但它還沒有成爲一個發佈版本。 – Karsus

0

您也可以嘗試pdp包;該軟件包旨在爲R中的各種擬合模型構建PDP。但請注意,此軟件包更爲通用,並未採用與GBM相同的計算快捷鍵。

# Development version works with gbm models 
devtools::install_github("bgreenwell/pdp") 

# Load the pdp package 
library(pdp) 

# Use plotPartial to change x-axis limits 
fit %>% 
    partial(pred.var = "Petal.Length", grid.resolution = 100, n.trees = 95) %>% 
    plotPartial(xlim = c(2, 3)) 

更妙的是,創建自己的預測值格:

xgrid <- data.frame(Petal.Length = seq(from = 2, to = 3, length = 100)) 

partial(fit, pred.var = "Petal.Length", pred.grid = xgrid, 
     plot = TRUE, n.trees = 95)