あなたはevaluate_Weka_classifierの関数を誤って解釈していると思います。どちらの場合も、evaluate_Weka_classifierは、トレーニングデータに基づいて相互検証のみを行います。モデル自体は変更されません。次のコードの混同行列を比較します。
m<-J48(Species~., data=iris)
e<-evaluate_Weka_classifier(m,numFolds = 5)
summary(m)
e
m2 <- AdaBoostM1(Species ~. , data = iris ,
control = Weka_control(W = list(J48, M = 30)))
e2 <- evaluate_Weka_classifier(m2,numFolds = 5)
summary(m2)
e2
どちらの場合も、要約はトレーニングデータに基づいた評価を提供し、関数evaluate_Weka_classifier()
は正しい交差検定を提供します。J48でもAdaBoostM1でも、モデル自体は交差検定に基づいて更新されません。
ここで、AdaBoostアルゴリズム自体について:実際、最終的な分類器に到達するために、ある種の「加重交差検定」を使用します。誤って分類されたアイテムは、次の構築ステップでより多くの重みが与えられますが、評価はすべての観測に対して等しい重みを使用して行われます。したがって、交差検定を使用して結果を最適化することは、適応ブースティングアルゴリズムの背後にある一般的な考え方に実際には適合しません。
トレーニングセットと評価セットを使用した真の交差検定が必要な場合は、次のようにすることができます。
id <- sample(1:length(iris$Species),length(iris$Species)*0.5)
m3 <- AdaBoostM1(Species ~. , data = iris[id,] ,
control = Weka_control(W = list(J48, M=5)))
e3 <- evaluate_Weka_classifier(m3,numFolds = 5)
# true crossvalidation
e4 <- evaluate_Weka_classifier(m3,newdata=iris[-id,])
summary(m3)
e3
e4
相互検証に基づいて更新されるモデルが必要な場合はrandomForest()
、randomForestパッケージなどの別のアルゴリズムに移動する必要があります。これにより、交差検定に基づいて最適なツリーのセットが収集されます。RWekaパッケージと組み合わせて使用することもできます。
編集:真の交差検定のために修正されたコード。subset
引数を使用すると、にも効果がありevaluate_Weka_classifier()
ます。