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 つの予測変数x1とx2と 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 を比較して、テスト エラー率が最も低いモデル、つまり使用するのに最適なモデルを決定します。