2015-05-10 9 views
4

Im в настоящее время практикует R на Kaggle с использованием данных титанические набор Я использую Random Forest AlgorthimR: Kaggle Титаник Dataset Random Forest NAs введены путем принуждения

Ниже приведен код

fit <- randomForest(as.factor(Survived) ~ Pclass + Sex + Age_Bucket + Embarked 
       + Age_Bucket + Fare_Bucket + F_Name + Title + FamilySize + FamilyID, 
       data=train, importance=TRUE, ntree=5000) 

I я получаю следующую ошибку

Error in randomForest.default(m, y, ...) : 
    NA/NaN/Inf in foreign function call (arg 1) 
In addition: Warning messages: 
1: In data.matrix(x) : NAs introduced by coercion 
2: In data.matrix(x) : NAs introduced by coercion 
3: In data.matrix(x) : NAs introduced by coercion 
4: In data.matrix(x) : NAs introduced by coercion 

Мои данные выглядит, как показано ниже

$ Survived : int 0 1 1 1 0 0 0 0 1 1 ... 
$ Pclass  : int 3 1 3 1 3 3 1 3 3 2 ... 
$ Sex  : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1... 
$ Age_Bucket : chr "20-25" "30-40" "25-30" "30-40" ... 
$ Fare_Bucket: chr "<10" "30+" "<10" "30+" ... 
$ Title  : Factor w/ 11 levels "Col","Dr","Lady",..: 7 8 5 8 7 7 7 4 8 8 ... 
$ F_Name  : chr "Braund" "Cumings" "Heikkinen" "Futrelle" ... 
$ FamilySize : num 2 2 1 2 1 1 1 5 3 2 ... 
$ Embarked : Factor w/ 3 levels "C","Q","S": 3 1 3 3 3 2 3 3 3 1 ... 
$ FamilyID : chr "Small" "Small" "Alone" "Small" ... 

Если я просто введите ниже, у меня нет никаких проблем принуждения, которые, насколько я могу видеть, это единственное место, где принуждение имеет место, чтобы создать значения NA

as.factor(Survived) 

Может кто-нибудь увидеть проблему

Спасибо за ваше время

ответ

7

Вам необходимо преобразовать ваши char столбцы в факторы. Факторы рассматриваются как целые числа внутри, тогда как поля символов - нет. Смотрите следующую небольшую демонстрацию:

данные:

df <- data.frame(y = sample(0:1, 26, rep=T), x1=runif(26), x2=letters, stringsAsFactors=F) 

df$y <- as.factor(df$y) 

> str(df) 
'data.frame': 26 obs. of 3 variables: 
$ y : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 2 2 1 ... 
$ x1: num 0.457 0.296 0.517 0.478 0.764 ... 
$ x2: chr "a" "b" "c" "d" ... 

Теперь, если я запускаю свою randomForest функции:

> randomForest(y ~ x1 + x2, data=df) 
Error in randomForest.default(m, y, ...) : 
    NA/NaN/Inf in foreign function call (arg 1) 
In addition: Warning message: 
In data.matrix(x) : NAs introduced by coercion 

я получаю ту же ошибку вы сделали.

В то время как, если я конвертировать char колонку в factor:

df$x2 <- as.factor(df$x2) 

> randomForest(y ~ x1 + x2, data=df) 

Call: 
randomForest(formula = y ~ x1 + x2, data = df) 
       Type of random forest: classification 
        Number of trees: 500 
No. of variables tried at each split: 1 

     OOB estimate of error rate: 61.54% 
Confusion matrix: 
    0 1 class.error 
0 0 16   1 
1 0 10   0 

Он отлично работает!

+0

Привет, Извините, я должен был быть яснее. Я сам выполнил строку «as.factor (Survived)», и он превратил все в один прекрасный момент в фактор, как то, что я изначально считал проблемой. Когда я запускаю его в коде случайного леса, он дает мне ошибку о принудительном –

+0

Можете ли вы рассчитать данные? – LyzandeR

+0

Я нашел причину, по которой это ломается! У вас есть '+ FamilyID' в вашем коде, но этот столбец отсутствует в вашем наборе данных. – LyzandeR