###前提・実現したいこと
Rでrpartを使ってfactorを含む特徴量を決定木で分類するプログラムを作成しています。
bootstrapのクロスバリデーションを使って分類性能を評価したいのですが、
学習時に使用されていないfactorの値(Level)が評価で使用されるとエラーが起こってしまい
うまく動きません。
もちろん、元データを変えて学習時に必ず全Levelを含むようなものに変えるということもありうるとは思うのですが、
データはいじらないようなライブラリとして提供したいので、
今回は元データを変えずに何とかする方法を探しています。
###発生している問題・エラーメッセージ
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = attr(object, : factor X3 has new levels x5
###該当のソースコード
R
1library(bootstrap) 2library(rpart) 3library(rpart.plot) 4 5fdata= read.csv("data.csv", header = T) 6 7theta.fit <- function(x,y){ 8 xdata <- cbind(x,data.frame(answer=y)) 9 return( rpart(answer ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8, 10 data = xdata, method = "class" , control=rpart.control(minsplit=5, cp=0.02, loss=matrix(c(0,1,1,0), byrow=TRUE, nrow=2)))) 11} 12 13theta.predict <- function(fit, x){ predict(fit, data.frame(x), type="class")} 14 15xresult <- crossval(fdata[,-2], fdata[,2], theta.fit, theta.predict, ngroup = 100) 16write.csv(xresult,"xresult2.csv")
###試したこと
- なるべく元データを変えてみる ⇒ かなり頑張ったがランダムに学習データが選ばれるので、確実に全levelが入るようにすることは困難
- ngroupをいろいろ変えてみる ⇒ どの値でもエラーが出てしまう
###補足情報(言語/FW/ツール等のバージョンなど)
Windows10でRStudio使用
下記は詳細
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 2.5
year 2016
month 04
day 14
svn rev 70478
language R
version.string R version 3.2.5 (2016-04-14)
nickname Very, Very Secure Dishes
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。