A: traincontrol を使用してトレーニング パラメーターを制御する方法


モデルがデータセットにどの程度適合できるかを評価するには、これまでに見たことのない観測結果でのパフォーマンスを分析する必要があります。

これを実現する最も一般的な方法の 1 つは、次のアプローチを使用するk 分割相互検証を使用することです。

1.データセットをほぼ同じサイズのkグループ、つまり「分割」にランダムに分割します。

2.ひだの 1 つを拘束セットとして選択します。テンプレートを残りの k-1 個の折り目に合わせて調整します。張力がかかった層の観察結果に基づいて MSE テストを計算します。

3.毎回異なるセットを除外セットとして使用して、このプロセスをk回繰り返します。

4. k 個のテスト MSE の平均として全体のテスト MSE を計算します。

R で k 分割相互検証を実行する最も簡単な方法は、R のキャレットライブラリのtrainControl()関数とtrain()関数を使用することです。

trainControl()関数はトレーニング パラメーター (使用する相互検証の種類、使用する分割数など) を指定するために使用され、 train()関数は実際にモデルをデータに適合させるために使用されます。 。

次の例は、 trainControl()関数とtrain()関数を実際に使用する方法を示しています。

例: R で trainControl() を使用する方法

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

ここで、 lm()関数を使用して、 x1x2を予測変数として、 yを応答変数として使用して、重線形回帰モデルをこのデータセットに近似するとします。

 #fit multiple linear regression model to data
fit <- lm(y ~ x1 + x2, data=df)

#view model summary
summary(fit)

Call:
lm(formula = y ~ x1 + x2, data = df)

Residuals:
    Min 1Q Median 3Q Max 
-3.6650 -1.9228 -0.3684 1.2783 5.0208 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept) 21.2672 6.9927 3.041 0.0188 *
x1 0.7803 0.6942 1.124 0.2981  
x2 -1.1253 0.4251 -2.647 0.0331 *
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.093 on 7 degrees of freedom
Multiple R-squared: 0.801, Adjusted R-squared: 0.7441 
F-statistic: 14.09 on 2 and 7 DF, p-value: 0.003516

モデル出力の係数を使用して、近似回帰モデルを作成できます。

y = 21.2672 + 0.7803*(x 1 ) – 1.1253(x 2 )

このモデルが目に見えない観測に対してどの程度うまく機能するかを知るために、k 分割相互検証を使用できます。

次のコードは、キャレットパッケージのtrainControl()関数を使用して、5 分割 ( number=5 ) を使用する k 分割相互検証 ( method=”cv” ) を指定する方法を示しています。

次に、このtrainControl()関数をtrain()関数に渡して、実際に 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.612302 1 3.232153

Tuning parameter 'intercept' was held constant at a value of TRUE

結果から、毎回8 つの観測値のサンプル サイズを使用してモデルが5回フィッティングされたことがわかります。

毎回、モデルを使用して2 つの保持された観測値の予測が行われ、毎回次の指標が計算されました。

  • RMSE:二乗平均平方根誤差。これは、モデルによって行われた予測と実際の観測値の間の平均差を測定します。 RMSE が低いほど、モデルは実際の観測値をより正確に予測できます。
  • MAE:平均絶対誤差。これは、モデルによって行われた予測と実際の観測値の間の平均絶対差です。 MAE が低いほど、モデルは実際の観測をより正確に予測できます。

5 つのコンポーネントの RMSE 値と MAE 値の平均が結果に表示されます。

  • RMSE: 3.612302
  • 前月: 3.232153

これらのメトリクスにより、新しいデータに対するモデルのパフォーマンスがわかります。

実際には、通常、いくつかの異なるモデルを適合させ、これらのメトリクスを比較して、目に見えないデータに対してどのモデルが最も優れたパフォーマンスを発揮するかを判断します。

たとえば、 多項式回帰モデルを近似し、それに対して K 分割交差検証を実行して、RMSE および MAE メトリクスが重線形回帰モデルとどのように比較されるかを確認できます。

注 #1:この例では、k=5 の折りを使用することを選択しますが、必要な折りの数を選択できます。実際には、信頼性の高いテストエラー率を生み出す最適な層数であることが証明されているため、通常は 5 ~ 10 層の間で選択します。

注 #2 : trainControl()関数は、多くの潜在的な引数を受け入れます。この関数の完全なドキュメントはここで見つけることができます。

追加リソース

次のチュートリアルでは、モデルのトレーニングに関する追加情報を提供します。

K-Fold 相互検証の概要
Leave-One-Out 相互検証の概要
機械学習における過学習とは何ですか?

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です