Caret :: train - Wartości nie są przypisane
Próbuję przypisać wartości przekazując „knnImpute” do argumentu preProcess metody train () Careta. Na podstawie poniższego przykładu wydaje się, że wartości nie są przypisywane, pozostają jako NA i są następnie ignorowane. Co ja robię źle?
Każda pomoc jest bardzo ceniona.
library("caret")
set.seed(1234)
data(iris)
# mark 8 of the cells as NA, so they can be imputed
row <- sample (1:nrow (iris), 8)
iris [row, 1] <- NA
# split test vs training
train.index <- createDataPartition (y = iris[,5], p = 0.80, list = F)
train <- iris [ train.index, ]
test <- iris [-train.index, ]
# train the model after imputing the missing data
fit <- train (Species ~ .,
train,
preProcess = c("knnImpute"),
na.action = na.pass,
method = "rpart" )
test$species.hat <- predict (fit, test)
# there is 1 obs. (of 30) in the test set equal to NA
# this 1 obs. was not returned from predict
Error in `library("caret")
set.seed(1234)
data(iris)
# mark 8 of the cells as NA, so they can be imputed
row <- sample (1:nrow (iris), 8)
iris [row, 1] <- NA
# split test vs training
train.index <- createDataPartition (y = iris[,5], p = 0.80, list = F)
train <- iris [ train.index, ]
test <- iris [-train.index, ]
# train the model after imputing the missing data
fit <- train (Species ~ .,
train,
preProcess = c("knnImpute"),
na.action = na.pass,
method = "rpart" )
test$species.hat <- predict (fit, test)
# there is 1 obs. (of 30) in the test set equal to NA
# this 1 obs. was not returned from predict
Error in `$<-.data.frame`(`*tmp*`, "species.hat", value = c(1L, 1L, 1L, :
replacement has 29 rows, data has 30
lt;-.data.frame`(`*tmp*`, "species.hat", value = c(1L, 1L, 1L, :
replacement has 29 rows, data has 30
AKTUALIZACJA: Mogłem użyć funkcji preProcess bezpośrednio do przypisania wartości. Nadal nie rozumiem, dlaczego to nie wydaje się występować w funkcji pociągu.
# attempt to impute using nearest neighbors
x <- iris [, 1:4]
pp <- preProcess (x, method = c("knnImpute"))
x.imputed <- predict (pp, newdata = x)
# expect all NAs were populated with an imputed value
stopifnot( all (!is.na (x.imputed)))
stopifnot( length (x) == length (x.imputed))