web-dev-qa-db-ja.com

キャレットパッケージを使用したk分割交差検証モデルの適用

クロスバリデーションに関する多くの投稿を読んだことから始めましょう。そこには多くの混乱があるようです。私の理解は、これは単にこれです:

  1. K-fold Cross Validation、つまり10倍を実行して、10倍の平均誤差を理解します。
  2. 許容できる場合は、完全なデータセットでモデルをトレーニングします。

Rでrpartを使用し、caretパッケージを利用して決定木を構築しようとしています。以下は私が使用しているコードです。

# load libraries
library(caret)
library(rpart)

# define training control
train_control<- trainControl(method="cv", number=10)

# train the model 
model<- train(resp~., data=mydat, trControl=train_control, method="rpart")

# make predictions
predictions<- predict(model,mydat)

# append predictions
mydat<- cbind(mydat,predictions)

# summarize results
confusionMatrix<- confusionMatrix(mydat$predictions,mydat$resp)

キャレットトレインアプリケーションに関して質問が1つあります。 キャレットパッケージの簡単な紹介 trainセクションを読みました。このセクションでは、リサンプリングプロセス中に「最適なパラメーターセット」が決定されます。

私の例では、正しくコーディングしましたか?コード内でrpartパラメーターを定義する必要がありますか、それともコードで十分ですか?

8
pman1971

k-fold cross validationを実行すると、10個を超える異なるモデル(k = 10と仮定)ごとに、各サンプルの予測をすでに作成しています。 k個の異なるモデルからの予測をすでに持っているため、完全なデータに対して予測を行う必要はありません。

できることは次のとおりです。

train_control<- trainControl(method="cv", number=10, savePredictions = TRUE)

それから

model<- train(resp~., data=mydat, trControl=train_control, method="rpart")

観測および予測をニース形式で表示するには、次のように入力します。

model$pred

また、質問の2番目の部分では、キャレットですべてのパラメーターを処理する必要があります。必要に応じて、パラメータを手動で調整できます。

17
zacdav

ここで注意すべき重要なことは、モデル選択とモデル誤差推定を混同しないことです。

交差検定を使用して、モデルのハイパーパラメーター(正則化パラメーターなど)を推定できます。

通常、バイアスと分散のトレードオフに適しているため、10倍のクロス検証で行われます(2倍はバイアスが高いモデルを引き起こす可能性があり、cvを1つ残すと分散/オーバーフィッティングが高いモデルを引き起こす可能性があります) 。

その後、独立したテストセットがない場合は、相互検証を使用してパフォーマンスメトリックの経験的分布を推定できます。最適なハイパーパラメーターが見つかったら、それらを使用してde cvエラーを推定できます。

このステップでは、ハイパーパラメーターは固定されていますが、モデルパラメーターはクロス検証モデル全体で異なる可能性があることに注意してください。

5
jorjasso

キャレットパッケージの 短い紹介ドキュメント の最初のページでは、パラメーター全体で最適なモデルが選択されていることが記載されています。出発点として、交差検証はモデル自体ではなく、最適なモデリングアプローチを選択するための手順であることを理解する必要があります CV-最終モデル選択 。 Caretは、tuneGridを使用したグリッド検索オプションを提供します。ここでは、テストするパラメーター値のリストを提供できます。トレーニングが終了すると、最終モデルには最適化されたパラメーターが設定されます。

2
KarthikS