علامة الإقحام::القطار - القيم غير المحتسبة
سؤال
أحاول إضافة القيم عن طريق تمرير "knnImpute" إلى وسيطة المعالجة المسبقة لطريقة القطار () الخاصة بـ Caret.وبناء على المثال التالي، يبدو أن القيم لا يتم احتسابها، وتبقى كـ NA ثم يتم تجاهلها.ما الخطأ الذي افعله؟
أي مساعدة هي محل تقدير كبير.
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
تحديث:لقد تمكنت من استخدام وظيفة preProcess مباشرة لإحتساب القيم.ما زلت لا أفهم سبب عدم حدوث ذلك داخل وظيفة القطار.
# 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))
المحلول
يرى ?predict.train
:
## S3 method for class 'train'
predict(object, newdata = NULL, type = "raw", na.action = na.omit, ...)
هناك na.omit
هنا ايضا:
> length(predict (fit, test))
[1] 29
> length(predict (fit, test, na.action = na.pass))
[1] 30
الأعلى
لا تنتمي إلى StackOverflow