2017-07-14 9 views
1

OKトレーニングデータ内に存在しない因子レベルなので、タイタニック競争に関連する他の初心者の質問:私は私のテストデータに対するランダムフォレスト予測を実行しようとしていますランダムフォレスト:新

。すべての私の仕事は、テストとトレーニングのデータを組み合わせて行われました。

私は今、テストデータとtrainingdata

に2分割している私は、次のコードを持っている:

trainingdata <- droplevels(data.combined[1:891,]) 
testdata <- droplevels(data.combined[892:1309,]) 

fitRF <- randomForest(as.factor(Survived) ~ Pclass + Sex + Age + SibSp 
+ Parch + Fare + Embarked 
        + new.title + family.size + FamilyID2, 
        data=trainingdata, 
        importance =T, 
        ntree=2000) 

varImpPlot(fitRF) 

#All works up to this point 


Prediction <- predict(fitRF, testdata) 
#This line above generates error 
submit <- data.frame(PassengerID = data.combined$PassengerId, Survived 
= Prediction) 
write.csv(submit, file="14072017_1_RF", row.names = F) 

私は予測ラインを実行すると、私は次のエラーを取得する:

> Prediction <- predict(fitRF, testdata) 
Error in predict.randomForest(fitRF, testdata) : 
    New factor levels not present in the training data 

を私が str(testdata)とstr(trainingdata)を実行すると、もはや一致する2つの要因が見えます

Trainingdata  
$ Parch   : Factor w/ 7 levels 

Testdata 
$ Parch   : Factor w/ 8 

Trainingdata 
$ FamilyID2  : Factor w/ 22 

Testdata 
$ FamilyID2  : Factor w/ 18 

エラーが発生する原因はこれらの違いですか?もしそうなら、私はこれをどのように解決するのですか?

多くのおかげ

追加情報: 私は、ランダムフォレストの作成ラインから煎るとFamilyID2を削除している、とのコードが動作するようになりましたので、それは間違いなく、不一致のレベルの問題を引き起こしているものを2つの変数です。

+0

[Rのランダムフォレストパッケージ]の可能な複製は、テストデータに新しい因子レベルが存在する場合の予測()中のエラーを示します。このエラーを回避する方法はありますか?](https://stackoverflow.com/questions/17059432/random-forest-package-in-r-shows-error-during-prediction-if-there-are-new-fact ) – RUser

+0

私はその投稿を見て、ソリューションを実装しようとしましたが、エラーは同じでした。 –

+0

'testdata < - factor(testdata、levels = levels(trainingdata))'を実行した場合、 'predict()'関数の前には問題はありません。 – Prem

答えて

1

ここで仲間初心者は、私は最近タイタニックと一緒に周りをちょうど酔っていた。

as.numeric(列車の$煎る) -

列車の$乾上がる<:私はそれがdoesn'tので、多分それは、数値にし、それが問題を解決することが、要因として乾上がる変数を持ってしても意味が考えます

> table(train$Parch) 

0 1 2 3 4 5 6 
678 118 80 5 4 5 1 

> table(test$Parch) 

0 1 2 3 4 5 6 9 
324 52 33 3 2 1 1 2 
> 

また、あなたが要因であると、変数が必要な場合、その後、あなただけの別を追加することができます。それ以外の場合は、テストデータは、列車のデータに存在しない煎るための9の値を持つ2台のOBSを、持っていますレベル:

train$Parch <- as.factor(train$Parch) # in my data, Parch is type int 
train$Parch 
levels(train$Parch) <- c(levels(train$Parch), "9") 
train$Parch # now Parch has 7 levels 
table(train$Parch) # level 9 is empty 
関連する問題