График частичной зависимости от gbm / caret дает непрерывную (0-1) шкалу по оси x для категориального предиктора - PullRequest
0 голосов
/ 18 октября 2018

Используя каретку, я сделал классификацию gbm и хочу получить графики частичной зависимости от этого.Мои PDP для непрерывных предикторов генерируются, как и ожидалось, но оси X моих категориальных предикторов (фиктивные, 0-1) находятся в масштабе от 0 до 1, когда я ожидал чего-то более похожего на графики Элита и Летвика (какв этот пост ).Я думаю, что прочитал ВСЕ вопросы о частичной зависимости ( здесь , здесь , здесь и т. Д.) И не могу найти тот, который имеет дело с x-ось.

Я использую код, унаследованный от другого члена лаборатории, для создания этих графиков, но он использовал gbm без каретки, так что, может, в этом проблема?Тем не менее, на всякий случай выше по течению этого (фиктивное кодирование?) Я воссоздал свою проблему с данными scat со всеми теми же шагами, которые я использую при обработке и моделировании моих фактических данных (веса, выборки с повышением частоты и т. Д.).

Принимая во внимание, что эта скат-модель - полная ерунда, остается вопрос категоричной прорисовки.

library(dplyr)
library(gbm)
library(groupdata2)
library(caret)
library(DMwR)

data(scat)

#Turn factors to dummy variables (run individually)
dmy1 <- dummyVars('~ Species', data = scat)
df1 <- data.frame(predict(dmy1, newdata = scat)) 
scat <- bind_cols(scat, df1) %>% select(., -Species)

dmy3 <- dummyVars('~ Location', data = scat)
df3 <- data.frame(predict(dmy3, newdata = scat))
scat <- bind_cols(scat, df3) %>% select(., -Location)

parts <- partition(scat, p = 0.20, id_col = "Month") #partition data 
test.pa <- parts[[1]]
train.pa <- parts[[2]]

up.train <- SMOTE(Site ~ ., data  = train.pa) #apply up-sampling to the train set                         
up.train.weights <- up.train  #create weights before removing Number column 
test.weight.pa <- test.pa

folds5.pa  <- groupKFold(up.train$Month, k = 5) #create k-folds in training dataset 

#Tidy both up (remove columns you aren't using, Month the grouping variable, Number the weighting factor) 
up.train <- up.train %>% select (-c(Month, Number))
test.pa <- test.pa %>% select (-c(Month, Number))

# Begin model 
trCntrl <- trainControl(method = "cv", 
                    index = folds5.pa, 
                    number = 5, 
                    summaryFunction = twoClassSummary,
                    classProbs = TRUE)
gbmGrid <- expand.grid(interaction.depth = 3, 
                   n.trees = 200,
                   shrinkage = 0.01, 
                   n.minobsinnode = 5)
pa.tuned.fit <- train(Site ~ ., data = up.train,
                  method = "gbm",
                  distribution = "bernoulli",
                  weights = up.train.weights$Number,
                  na.action = na.pass,
                  trControl = trCntrl, 
                  tuneGrid = gbmGrid,
                  verbose = FALSE)
pa.tuned.fit
summary(pa.tuned.fit)
pa.final1 <- pa.tuned.fit$finalModel

#Plotting continuous predictor (makes sense)
xy1<- plot(pa.final1,'Taper',return.grid=TRUE)
x <- xy1$Taper
y <- plogis(xy1$y)

plot(y~x,type='l',bty="u",ylab="Marginal Effect on Probability",
 lwd=2,col="royalblue4",xlab="",las=1,cex.axis=0.75)

#Plotting categorical predictor (???)
xy2<- plot(pa.final1,'Location.edge',return.grid=TRUE, type = "response")
x <- xy2$Location.edge
y <- plogis(xy2$y)

plot(y~x,type='l',bty="u",ylab="Marginal Effect on Probability",
 lwd=2,col="royalblue4",xlab="",las=1,cex.axis=0.75)

Надеюсь, это работает!Я полагаю, что другая возможность состоит в том, что это не правильно, и в этом случае кто-то сможет объяснить, почему ось X «должна» отображаться таким образом?

пример категориального PDP из вышеприведенного кода: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...