Почему broom :: augment возвращает больше строк, чем входных данных? - PullRequest
0 голосов
/ 28 декабря 2018

Я заметил, что при использовании функции увеличения Брума во вновь созданном фрейме данных больше строк, чем я изначально начал.например,

# Statistical Modeling
## dummy vars
library(tidyverse)
training_data <- mtcars
dummy <- caret::dummyVars(~ ., data = training_data, fullRank = T, sep = ".")
training_data <- predict(dummy, mtcars) %>% as.data.frame()
clean_names <- names(training_data) %>% str_replace_all(" |`", "")
names(training_data) <- clean_names

## make target a factor
target <- training_data$mpg
target <- ifelse(target < 20, 0,1) %>% as.factor() %>% make.names()

## custom evaluation metric function
my_summary  <- function(data, lev = NULL, model = NULL){
  a1 <- defaultSummary(data, lev, model)
  b1 <- twoClassSummary(data, lev, model)
  c1 <- prSummary(data, lev, model)
  out <- c(a1, b1, c1)
  out}

## tuning & parameters
set.seed(123)
train_control <- trainControl(
  method = "cv",
  number = 3,
  sampling = "up", # over sample due to inbalanced data
  savePredictions = TRUE,
  verboseIter = TRUE,
  classProbs = TRUE,
  summaryFunction = my_summary
)

linear_model = train(
  x = select(training_data, -mpg), 
  y = target,
  trControl = train_control,
  method = "glm", # logistic regression
  family = "binomial",
  metric = "AUC"
)

library(broom)
linear_augment <- augment(linear_model$finalModel)

Теперь, если я посмотрю на свой новый расширенный фрейм данных и сравню с исходным mtcars-кодом:

> nrow(mtcars)
[1] 32
> nrow(linear_augment)
[1] 36

Ожидание было для 32 строк, а не 36. Почему это?

1 Ответ

0 голосов
/ 28 декабря 2018

Вы выполняете повышающую дискретизацию в своем вызове trainControl, в результате чего получается больше выборок, чем в исходном наборе данных.

## tuning & parameters
set.seed(123)
train_control <- trainControl(
  method = "cv",
  number = 3,
  # sampling = "up", # over sample due to inbalanced data
  savePredictions = TRUE,
  verboseIter = TRUE,
  classProbs = TRUE,
  summaryFunction = my_summary
)

linear_model = train(
  x = select(training_data, -mpg), 
  y = target,
  trControl = train_control,
  method = "glm", # logistic regression
  family = "binomial",
  metric = "AUC"
)
library(broom)
linear_augment <- augment(linear_model$finalModel)

Примечание: повышенная дискретизация закомментирована

> dim(linear_augment)
[1] 32 19
...