Python 中的留一交叉验证(带有示例)


为了评估模型在数据集上的性能,我们需要衡量模型做出的预测与观察到的数据的匹配程度。

执行此操作的常用方法称为留一交叉验证 (LOOCV) ,它使用以下方法:

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 步:创建数据

接下来,我们将创建一个 pandas DataFrame,其中包含两个预测变量x1x2以及一个响应变量 y。

 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 步:执行留一法交叉验证

接下来,我们将对数据集拟合 多元线性回归模型,并执行 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 越低,模型预测实际观测值的能力就越好。

评估模型性能的另一个常用指标是均方根误差 (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,以确定哪个模型产生最低的测试错误率,因此是最好使用的模型。

其他资源

留一交叉验证 (LOOCV) 快速简介
Python 线性回归完整指南

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注