Python での leave-one-out 相互検証 (例あり)


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

これを行うために一般的に使用される方法は、Leave-One-Out Cross-Validation (LOOCV)として知られており、次のアプローチを使用します。

1. 1 つを除くすべての観測値をトレーニング セットの一部として使用して、データ セットをトレーニング セットとテスト セットに分割します。

2.トレーニング セットのデータのみを使用してモデルを作成します。

3.モデルを使用して、モデルから除外された観測値の応答値を予測し、平均二乗誤差 (MSE) を計算します。

4.このプロセスをn回繰り返します。テスト MSE をすべてのテスト MSE の平均として計算します。

このチュートリアルでは、Python で特定のモデルに対して LOOCV を実行する方法を段階的に説明します。

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

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

 from sklearn. model_selection import train_test_split
from sklearn. model_selection import LeaveOneOut
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: Leave-One-Out 相互検証を実行する

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

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

#define cross-validation method to use
cv = LeaveOneOut()

#build multiple linear regression model
model = LinearRegression()

#use LOOCV 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.1461548083469726

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

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

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

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

#define cross-validation method to use
cv = LeaveOneOut()

#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)))

3.619456476385567

結果から、二乗平均平方根誤差 (RMSE) が3.619であることがわかります。 RMSE が低いほど、モデルは実際の観測をより適切に予測できます。

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

追加リソース

Leave-One-Out 相互検証 (LOOCV) の概要
Python の線形回帰の完全ガイド

コメントを追加する

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