2016-01-29 35 views
3

我試圖在沒有成功擬合模型後獲得混淆矩陣。使用相同的代碼和決策樹,相反,沒有問題。這是我的代碼:對象中的缺失值-R中的隨機森林混亂矩陣

library(caret) 
library(randomForest) 

training <- read.csv("https://d396qusza40orc.cloudfront.net/predmachlearn/pml-training.csv", na.strings=c("#DIV/0!"), row.names = 1) 

to_exclude <- nearZeroVar(training) 
training <- training[, -to_exclude] 

set.seed(1234) 
train_idx <- createDataPartition(training$classe, p = 0.8, list = FALSE) 
train <- training[train_idx,] 
validation <- training[-train_idx,] 

rf_model <- randomForest(classe ~ . , data=train, method="class") 
rf_validation <- predict(rf_model, validation, type="class") 

confusionMatrix(rf_validation, validation$classe) 

這就是錯誤:

Error in na.fail.default(list(classe = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, : missing values in object

我也試試這個:

table(rf_validation, validation$classe) 

這就造成了同樣的錯誤。 如果我用:

dt_model <- rpart(classe ~ ., data=train, method="class") 

相反,一切工作正常。

我錯過了什麼?

+3

'randomForest()'''默認'na.action = na.fail'。因此,它打破了(在我的機器上)。例如,如果您願意忽略「NA」值,您可以將其設置爲「na.action = na.omit」。 – lukeA

+0

#coursera問題 – jtlz2

回答

1

正如@lukeA所述,由於NA值,我遇到了問題。 爲我工作的另一種選擇是清理我的數據多一點點:

training <- training[, colSums(is.na(training)) == 0] 

由NA值形成的刪除功能。