我们如何在线性回归上应用 K 折交叉验证?回归包含权重更新和迭代,那么我们是否将 K-fold 集成到它?
如果完成,是否像我们使用线性回归训练第一个 K-1 折叠并执行迭代以获得权重,然后进行下一个折叠并继续进行相同的操作,依此类推,直到完成所有折叠并选择最佳权重或折叠从中?
我们如何在线性回归上应用 K 折交叉验证?回归包含权重更新和迭代,那么我们是否将 K-fold 集成到它?
如果完成,是否像我们使用线性回归训练第一个 K-1 折叠并执行迭代以获得权重,然后进行下一个折叠并继续进行相同的操作,依此类推,直到完成所有折叠并选择最佳权重或折叠从中?
如何在回归中使用交叉验证(假设为 10 倍):将数据集分成 10% 和 90%,在 90% 上进行训练,在剩余的 10 上测试指标(平方误差或您正在建模的任何内容) %。使用不同的 10% 组做 10 次。现在您有 10 个指标,您可以分析其均值和范围,以查看模型是否对过度拟合具有鲁棒性。
如何选择模型:在整个数据集上进行训练。交叉验证用于测试/验证目的,您不使用交叉验证生成的模型。
让我们假设您有一个数据集. 我们首先将该数据集拆分为训练数据集和一个. 对于交叉验证,我们只使用训练数据集. 该数据集分为-折叠,, ...,.
让我们考虑多项式的阶数作为超参数范围。
放: 采用这些折叠以确定模型的参数并使用剩余的数据集进行验证。对于回归,我们经常使用误差平方和的平均值. 正如我们所能做的在这些计算中,我们将获得误差平方和的平均值. 通常是这些平方误差的平均值用作验证质量的衡量标准。
然后设置获得, ... ,.
最后,选择价值为此是最小的。然后使用这个顺序来确定全训练数据集上的参数并在验证集上验证.
在伪代码/python 中
import numpy as np
Initialize dataset $\mathcal{D}$
Initialize the ratio training to validation
Initialize k (the number of folds)
Initialize M_min (the maximum value for the hyperparameter)
Initialize M_max (the maximum value for the hyperparameter)
Initialize array M_values = np.arange(M_min, M_max + 1)
Initialize array MSE_values = np.arange([0] * M_values.size)
Split the dataset in D_train and D_validation.
Split the training dataset in K folds
for M in M_values:
Initialize means squared error MSE = 0
for k in range(1, K + 1):
Determine data set D_crossval = D_train \ D_train_k
Determine model for M and D_crossval
Evaluate model MSE_crossval
MSE += MSE_crossval
MSE /= M_values.size
MSE_values[M-M_min] = MSE
M_best = np.argmin(MSE_values) + M_min
print('M_best ={}'.format(M_best))
Determine model for M_best and D_train
Evaluate model on D_validation