Python 中的 k 折交叉验证(逐步)


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

执行此操作的常用方法称为k 折交叉验证,它使用以下方法:

1.将数据集随机分为k组,或“折叠”,大小大致相等。

2.选择其中一个折叠作为约束装置。将模板调整到剩余的 k-1 折叠。根据张紧层中的观测值计算 MSE 检验。

3.重复此过程k次,每次使用不同的集合作为排除集。

4.将总体测试 MSE 计算为k 个测试 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 步:创建数据

接下来,我们将创建一个 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:执行 K 折交叉验证

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

评估模型性能的另一个常用指标是均方根误差 (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 折交叉验证简介
Python 线性回归完整指南
Python 中的留一交叉验证

添加评论

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