R での k フォールド相互検証 (ステップバイステップ)
データセットに対するモデルのパフォーマンスを評価するには、モデルによって行われた予測が観察されたデータとどの程度一致するかを測定する必要があります。
これを行うために一般的に使用される方法は、 k 分割相互検証として知られており、次のアプローチを使用します。
1.データセットをほぼ同じサイズのkグループ、つまり「分割」にランダムに分割します。
2.ひだの 1 つを拘束セットとして選択します。テンプレートを残りの k-1 個の折り目に合わせて調整します。張力がかかった層の観察結果に基づいて MSE テストを計算します。
3.毎回異なるセットを除外セットとして使用して、このプロセスをk回繰り返します。
4. k 個のテスト MSE の平均として全体のテスト MSE を計算します。
R で k 分割相互検証を実行する最も簡単な方法は、R のキャレットライブラリのtrainControl()関数を使用することです。
このチュートリアルでは、この関数を使用して R の特定のモデルに対して k 分割交差検証を実行する方法の簡単な例を示します。
例: R での K フォールド相互検証
R に次のデータセットがあるとします。
#create data frame df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23), x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9), x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5)) #view data frame df y x1 x2 6 2 14 8 5 12 12 4 12 14 3 13 14 4 7 15 6 8 17 7 7 22 5 4 24 8 6 23 9 5
次のコードは、重線形回帰モデルをR のこのデータセットに近似し、k = 5 回で k 分割相互検証を実行してモデルのパフォーマンスを評価する方法を示しています。
library (caret) #specify the cross-validation method ctrl <- trainControl(method = " cv ", number = 5) #fit a regression model and use k-fold CV to evaluate performance model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl) #view summary of k-fold CV print(model) Linear Regression 10 samples 2 predictors No pre-processing Resampling: Cross-Validated (5 fold) Summary of sample sizes: 8, 8, 8, 8, 8 Resampling results: RMSE Rsquared MAE 3.018979 1 2.882348 Tuning parameter 'intercept' was held constant at a value of TRUE
結果を解釈する方法は次のとおりです。
- 前処理は行われませんでした。つまり、モデルをフィッティングする前に、いかなる方法でもデータをスケーリングしませんでした。
- モデルを評価するために使用したリサンプリング方法は 5 分割交差検証でした。
- 各トレーニング セットのサンプル サイズは 8 でした。
- RMSE:二乗平均平方根誤差。これは、モデルによって行われた予測と実際の観測値の間の平均差を測定します。 RMSE が低いほど、モデルは実際の観測値をより正確に予測できます。
- R2 乗:これは、モデルによって行われた予測と実際の観測値の間の相関関係の尺度です。 R 二乗が大きいほど、モデルは実際の観測をより正確に予測できます。
- MAE:平均絶対誤差。これは、モデルによって行われた予測と実際の観測値の間の平均絶対差です。 MAE が低いほど、モデルは実際の観測をより正確に予測できます。
結果で提供される 3 つの測定値 (RMSE、R 二乗、MAE) のそれぞれから、未公開データに対するモデルのパフォーマンスのアイデアが得られます。
実際には、通常、いくつかの異なるモデルを適合させ、ここで示した結果によって提供される 3 つの指標を比較して、どのモデルが最も低いテストエラー率を生成するか、したがって使用するのに最適なモデルを決定します。
次のコードを使用して、最終的なモデルの適合性を調べることができます。
#view final model
model$finalModel
Call:
lm(formula = .outcome ~ ., data = dat)
Coefficients:
(Intercept) x1 x2
21.2672 0.7803 -1.1253
最終的なモデルは次のようになります。
y = 21.2672 + 0.7803*(x 1 ) – 1.12538(x 2 )
次のコードを使用して、各フォールドに対して行われたモデル予測を表示できます。
#view predictions for each fold
model$resample
RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5
この例では、k=5 の折りを使用することを選択していますが、必要な折りの数を選択できることに注意してください。実際には、信頼性の高いテストエラー率を生み出す最適な層数であることが証明されているため、通常は 5 ~ 10 層の間で選択します。