キャレット パッケージを使用して分類ツリーを実行するのに数日間苦労しています。問題は私の因子変数です。ツリーを生成しますが、最適なモデルを使用してテスト サンプルを予測しようとすると失敗します。これは、train 関数が因子変数のダミーを作成し、予測関数がこれらの新しく作成されたダミーをテスト セットで見つけることができないためです。 . この問題にどう対処すればよいですか?
私のコードは次のとおりです。
install.packages("caret", dependencies = c("Depends", "Suggests"))
library(caret)
db=data.frame(read.csv ("db.csv", head=TRUE, sep=";", na.strings ="?"))
fix(db)
db$defaillance=factor(db$defaillance)
db$def=ifelse(db$defaillance==0,"No","Yes")
db$def=factor(db$def)
db$defaillance=NULL
db$canal=factor(db$canal)
db$sect_isodev=factor(db$sect_isodev)
db$sect_risq=factor(db$sect_risq)
#delete zero variance predictors
nzv <- nearZeroVar(db[,-78])
db_new <- db[,-nzv]
inTrain <- createDataPartition(y = db_new$def, p = .75, list = FALSE)
training <- db_new[inTrain,]
testing <- db_new[-inTrain,]
str(training)
str(testing)
dim(training)
dim(testing)
トレーニング/テスト用の str() 関数のサンプルを以下に示します。
$ FDR : num 1305 211 162 131 143 ...
$ FCYC : num 0.269 0.18 0.154 0.119 0.139 ...
$ BFDR : num 803 164 108 72 76 63 100 152 188 80 ...
$ TRES : num 502 47 54 59 67 49 53 -7 -103 -109 ...
$ sect_isodev: Factor w/ 9 levels "1","2","3","4",..: 4 3 3 3 3 3 3 3 3 3 ...
$ sect_risq : Factor w/ 6 levels "0","1","2","3",..: 6 6 6 6 6 6 6 6 6 6 ...
$ def : Factor w/ 2 levels "No","Yes": 1 1 1 1 1 1 1 1 1 1 ...
> dim(training)
[1] 14553 42
> dim(testing)
[1] 4850 42
次に、私のコードは次のようになります。
fitControl <- trainControl(method = "repeatedcv",
number = 10,
repeats = 10,
classProbs = TRUE,
summaryFunction = twoClassSummary)
#CART1
set.seed(1234)
tree1 = train (def~.,
training,
method = "rpart",
tuneLength=20,
metric="ROC",
trControl = fitControl)
のサンプル
summary(tree1$finalModel)
ここにある
RNTB 38.397731
sect_isodev1 6.742289
sect_isodev3 4.005016
sect_isodev8 2.520850
sect_risq3 9.909127
sect_risq4 6.737908
sect_risq5 3.085714
SOLV 73.067539
TRES 47.906884
sect_isodev2 0.000000
sect_isodev4 0.000000
sect_isodev5 0.000000
sect_isodev6 0.000000
sect_isodev7 0.000000
sect_isodev9 0.000000
sect_risq0 0.000000
sect_risq1 0.000000
sect_risq2 0.000000
そして、ここにエラーがあります:
model.tree1 <- predict(tree1$finalModel,testing) eval(expr、envir、enclos) のエラー: オブジェクト 'sect_isodev1' が見つかりません
私はまだ別のことに興味があります。Max Kuhn の "Predictive Modeling with R" で、次の構文を見つけました。
predict(rpartTune$finalModel, newdata, type = "class")
ここrpartTune$finalModel
で、私のものと同一の分類木 (または私のものと同一のもの) を分類します。現在、R は type="class" を受け入れません。type="prob" のみ。そのせいで困っています。
ご回答ありがとうございます。