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,其中包含两个预测变量x1和x2以及一个响应变量 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() 函数的完整文档。