2017-04-27 17 views
1

私はRを使用していて、意思決定ツリーを構築しようとしています。私はすでにctreeのパッケージパーティーとrpartのrpartを使っています。 しかし、モデルのクロスバリデーションを行う必要があるので、私は関数train()と使用したいメソッドを使ってキャレットパッケージを使用することができます。train()関数に値がありません。ツリーのキャレット

library(caret) 
cvCtrl <- trainControl(method = "repeatedcv", repeats = 2, 
        classProbs = TRUE) 

ctree.installed<- train(TARGET ~ OPENING_BALANCE+ MONTHS_SINCE_EXPEDITION+ 
        RS_DESC+SAP_STATUS+ ACTIVATION_STATUS+ ROTUL_STATUS+ 
        SIM_STATUS+ RATE_PLAN_SEGMENT_NORM, 
        data=trainSet, 
        method = "ctree", 
        trControl = cvCtrl) 

はしかし、私の変数「OPENING_BALANCE」と「MONTHS_SINCE_EXPEDITIONは、」いくつかの欠損値を持っており、機能はそのために動作しません。私は木を造ろうとしているので、なぜこれが起きるのか分かりません。この問題は、他のパッケージを使用している場合は発生しません。

これはエラーです:私は本当にそれらの観測を破棄したくないので、

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

私が合格= na.actionを使いたくありませんでした。

何か間違っていますか?なぜこうなった?これに関する提案はありますか?

は、私はいくつかの欠損値を持つmlbenchパッケージのデータセットPimaIndiansDiabetes2を考慮し始めるあなたの助け

+0

' na.action = na.pass'はnaを破棄しません。それは渡します。つまり、 'NA'をサポートしない' predict'関数を使うとそれは失敗するでしょう。 'na.action = na.omit' _これらの観測を破棄する必要があります。 –

+0

これは見つかりましたか?役に立つかもしれません:https://stats.stackexchange.com/questions/144922/r-caret-and-nas –

+0

あなたの答えをありがとう。私が見つけた問題は、予測関数を使用すると、結果がテストセットに与えたものよりもはるかに少ない観測値を返すということです。テストセットに30000の観測値があると仮定して、10000個の入力変数に欠損値があるため、20000の予測だけを受け取ります。 –

答えて

1

いただきありがとうございます。 train

data(PimaIndiansDiabetes2, package = "mlbench") 
head(PimaIndiansDiabetes2) 

    pregnant glucose pressure triceps insulin mass pedigree age diabetes 
1  6  148  72  35  NA 33.6 0.627 50  pos 
2  1  85  66  29  NA 26.6 0.351 31  neg 
3  8  183  64  NA  NA 23.3 0.672 32  pos 
4  1  89  66  23  94 28.1 0.167 21  neg 
5  0  137  40  35  168 43.1 2.288 33  pos 
6  5  116  74  NA  NA 25.6 0.201 30  neg 

Iは、(不変のデータセットを返すように導く)na.passna.actionを設定し、ctreemaxsurrogateパラメータを設定:

library(caret) 
cvCtrl <- trainControl(method="repeatedcv", repeats = 2, classProbs = TRUE) 
set.seed(1234) 
ctree1 <- train(diabetes ~ ., data=PimaIndiansDiabetes2, 
        method = "ctree", 
        na.action = na.pass, 
        trControl = cvCtrl, 
        controls=ctree_control(maxsurrogate=2)) 

結果である:

print(ctree1) 
Conditional Inference Tree 

392 samples 
    8 predictor 
    2 classes: 'neg', 'pos' 

No pre-processing 
Resampling: Cross-Validated (10 fold, repeated 2 times) 
Summary of sample sizes: 691, 692, 691, 691, 691, 691, ... 
Resampling results across tuning parameters: 

    mincriterion Accuracy Kappa  
    0.01   0.7349111 0.4044195 
    0.50   0.7485731 0.4412557 
    0.99   0.7323906 0.3921662 

Accuracy was used to select the optimal model using the largest value. 
The final value used for the model was mincriterion = 0.5. 
+0

こんにちは、あなたの答えをありがとう:)なぜmaxsurrogateパラメータを設定しましたか? –

+1

私の目的は 'train 'の中に' ctree'パラメータを渡す方法を示すことでした。さらに、 'maxsurrogate'は欠損値がある場合には重要なパラメータです(正の値に設定する必要があります)。 –

+0

なぜですか?申し訳ありません私は初心者xD –

関連する問題