علامة الإقحام::القطار - القيم غير المحتسبة

StackOverflow https://stackoverflow.com//questions/20054906

  •  02-01-2020
  •  | 
  •  

سؤال

أحاول إضافة القيم عن طريق تمرير "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

الأعلى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top