1

Naive Bayes モデルを実行していますが、klaRパッケージを直接使用すると非常に高速で、標準のラップトップで計算するのに 1 秒もかかりません。

mod <- NaiveBayes(category ~ ., data=training, na.action = na.omit)

ただし、caretパッケージのtrain()インターフェイス (上記の関数の単なるラッパーだと思っていた) を使用すると、非常に長い時間がかかります。

mod <- train(category ~ ., data=training, na.action = na.omit, method="nb")

これは、trainデフォルトでリサンプリングが含まれているためだと思います。含めてみtrControl = trainControl(method = "none")ましたが、次のエラーが表示されました。

Error in train.default(x, y, weights = w, ...) : Only one model should be specified in tuneGrid with no resampling

これが発生する理由や、2 つの関数の速度の違いに関する一般的な考えはありますか?

また、速度の違いが数式インターフェイスに関連している可能性はありますか? 私の予測因子のいくつかは、100 レベルを超える因子です。

4

1 に答える 1

4

caret::trainを指定せずに呼び出すとtrControl, tuneGrid, tuneLengthデフォルトで可能なすべてのハイパーパラメータに対してグリッド検索が実行されるためです!!

trControl = trainControl(), tuneGrid = NULL, tuneLength = 3

...さらに悪いことに、その特定のモデル(この場合は NaiveBayes)のデフォルト パラメータを使用してグリッド検索を行います!

そして、のデフォルトtrainControlは絶対にあなたが望むものではありません: method = "boot", number = 10 or 25、これはブートストラップの 10/25 パス全体であり、中間結果も保存します ( returnData=T)。

したがって、 を実行して 1 つの悪いデフォルトをオーバーライドしますtrControl = trainControl(method = "none")が、それでもtuneGrid = NULL, tuneLength = 3. それらを明示的に設定/オーバーライドする必要があります。

(@ Khl4vがすでにコメントで述べているように)

于 2015-07-17T00:38:25.873 に答える