Используя каретку, я сделал классификацию 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 из вышеприведенного кода: