Python での k フォールド相互検証 (ステップバイステップ)


データセットに対するモデルのパフォーマンスを評価するには、モデルによって行われた予測が観察されたデータとどの程度一致するかを測定する必要があります。

これを行うために一般的に使用される方法は、 k 分割相互検証として知られており、次のアプローチを使用します。

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

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

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

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

このチュートリアルでは、Python で特定のモデルに対して k 分割相互検証を実行する方法のステップバイステップの例を提供します。

ステップ 1: 必要なライブラリをロードする

まず、この例に必要な関数とライブラリをロードします。

 from sklearn. model_selection import train_test_split
from sklearn. model_selection import KFold
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd

ステップ 2: データを作成する

次に、2 つの予測変数x1x2と 1 つの応答変数 y を含む pandas DataFrame を作成します。

 df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
                   ' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
                   ' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})

ステップ 3: K-Fold 相互検証を実行する

次に、 重線形回帰モデルをデータセットに適合させ、LOOCV を実行してモデルのパフォーマンスを評価します。

 #define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']

#define cross-validation method to use
cv = KFold ( n_splits = 10 , random_state = 1 , shuffle = True )

#build multiple linear regression model
model = LinearRegression()

#use k-fold CV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
                         cv=cv, n_jobs=-1)

#view mean absolute error
mean(absolute(scores))

3.6141267491803646

結果から、平均絶対誤差 (MAE) が3.614であることがわかります。つまり、モデル予測と実際に観測されたデータの間の平均絶対誤差は 3.614 です。

一般に、MAE が低いほど、モデルは実際の観測をより適切に予測できます。

モデルのパフォーマンスを評価するためによく使用されるもう 1 つの指標は、二乗平均平方根誤差 (RMSE) です。次のコードは、LOOCV を使用してこのメトリクスを計算する方法を示しています。

 #define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']

#define cross-validation method to use
cv = KFold ( n_splits = 5 , random_state = 1 , shuffle = True ) 

#build multiple linear regression model
model = LinearRegression()

#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
                         cv=cv, n_jobs=-1)

#view RMSE
sqrt(mean(absolute(scores)))

4.284373111711816

結果から、二乗平均平方根誤差 (RMSE) が4.284であることがわかります。

RMSE が低いほど、モデルは実際の観測をより適切に予測できます。

実際には、通常、いくつかの異なるモデルを適合させ、各モデルの RMSE または MAE を比較して、テスト エラー率が最も低いモデル、つまり使用するのに最適なモデルを決定します。

また、この例では k=5 の折りを使用することを選択していますが、必要な折りの数を選択できることにも注意してください。

実際には、信頼性の高いテストエラー率を生み出す最適な層数であることが証明されているため、通常は 5 ~ 10 層の間で選択します。

sklearn の KFold() 関数の完全なドキュメントは、ここで見つけることができます。

追加リソース

K-Fold 相互検証の概要
Python の線形回帰の完全ガイド
Python での Leave-One-Out 相互検証

コメントを追加する

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