4

奇妙な問題があります。adabag パッケージのブースト機能で mfinal 引数を 10 を超えて増やそうとすると、エラーが発生します。mfinal=9 でも警告が表示されます。

私の列車データには、7 つのクラス従属変数と 100 の独立変数、および約 22000 のデータ サンプルがあります (DMwR を使用して 1 つのクラスをスモートしました)。私の従属変数は、順番にトレーニング データセットの最後にあります。

library(adabag)
gc()
exp_recog_boo <- boosting(V1 ~ .,data=train_dataS,boos=TRUE,mfinal=9)

Error in 1:nrow(object$splits) : argument of length 0
In addition: Warning messages:
1: In acum + acum1 :
longer object length is not a multiple of shorter object length

前もって感謝します。

4

6 に答える 6

1

私は問題をヒットすると思います。

これを無視してください - コントロールを cp = 0 で構成すると、これは起こりません。ツリーの最初のノードが改善されない場合 (または少なくとも cp よりも良くない場合)、ツリーは 0 ノードのままになるため、空のツリーがあり、アルゴリズムが失敗すると思います。

編集: 問題は、rpart が 1 つのリーフ (ノード) のみを持つツリーを生成し、ブースティング メソッドがこの文を使用することです。 m]]ノードが1つしかないツリーでは、エラーが発生します。

それを解決するには、ブースティング方法を変更できます。

書きます: fix(boosting) と * の行を追加します。

if (boos == TRUE) { 
**   k <- 1
**   while (k == 1){
     boostrap <- sample(1:n, replace = TRUE, prob = pesos)
     fit <- rpart(formula, data = data[boostrap, -1],
         control = control)
**   k <- length(fit$frame$var)
**   }
     flearn <- predict(fit, newdata = data[, -1], type = "class")
     ind <- as.numeric(vardep != flearn)
     err <- sum(pesos * ind)
 }

これにより、アルゴリズムが 1 つのリーフ ツリーを受け入れることができなくなりますが、無限ループを避けるために、制御パラメーターから CP を 0 に設定する必要があります。

于 2014-09-10T14:37:01.277 に答える
0

私も最近同じ問題に遭遇しましたが、この例の R スクリプトは完全に解決します!

主な考え方は、少なくともすべてのツリーで分割が試行されるように、rpart のコントロール (adabag がツリーの作成に使用します。rpart.control を参照) を適切に設定する必要があるということです。

完全にはわかりませんが、「長さ0の引数」は空のツリーの結果である可能性があるようです。これは、関数に分割を試行しないように指示する「複雑さ」パラメーターのデフォルト設定があるために発生する可能性があります均一性の低下/適合性の欠如が特定のしきい値を下回っている場合。

于 2013-10-25T04:46:01.310 に答える