1
我有一些數據可以通過非隨機過程生成NA。通常這涉及用戶不用手動輸入數據或用各種自動作業進行系統性問題。由於這種GBM模型對我的吸引力,因爲它們明確處理NA值,而不是插補。但是,我遇到的問題是,GBM在我的測試集中輸出包含NA的行的預測結果。下面是與虹膜工作的例子:使用含GBM的NA預測新數據R
library(missForest)
library(caret)
set.seed(1)
iris.na <- prodNA(iris, noNA = 0.1)
iris.na$Species <- ifelse(iris.na$Species == "setosa", "setosa", "other")
iris.na$Species <- as.factor(iris.na$Species)
set.seed(1)
train.idx <- createDataPartition(y = iris.na$Species, p = .90, list = FALSE)
train <- iris.na[ train.idx,]
test <- iris.na[ -train.idx,]
rm(train.idx)
fitControl <- trainControl(method = "cv", number = 5)
#fitControl <- trainControl(method = "oob")
fit <- train(Species ~ ., data = train, method = "gbm",
trControl = fitControl,
verbose = FALSE)
現在,在樣本外預測工作,我會期望GBM和我收到的每一行一個預測。
train.pred <- predict(fit, type="prob")
nrow(train)
#[1] 136
nrow(train.pred)
#[1] 136
但是,移出樣本測試數據不會爲每行返回一個預測。正如您在下面看到的,每個包含NA的行都不會返回預測結果。
test.pred <- predict(fit, newdata = test, type="prob")
nrow(test)
#[1] 14
nrow(test.pred)
#[1] 10
因此,它似乎會降低NAs對新數據的預測。理想情況下,我希望在測試和訓練數據集中的每一行都能看到1-1的預測關係,但是我爲什麼僅僅爲了訓練而返回這個測試集而不是測試集。謝謝你的幫助。
完美修復。謝謝你的幫助! – Stencil