【问题标题】:How to create a k-fold cross validation test?如何创建 k 折交叉验证测试?
【发布时间】:2019-07-13 18:47:03
【问题描述】:
我希望验证来自污染传感器的数据。我将它与来自 londonair.org.uk 的数据进行比较以进行比较。我用 X 轴上的传感器数据和 Y 轴上的 Londonair 数据创建了一个简单的线性回归模型,并且能够得到一个简单的模型(以 y=mx + c 的形式)。我的教授要求我使用 k 折交叉验证来验证模型,但我不确定如何。
我不确定要在哪个数据集上执行测试。它应该是从传感器获取的原始数据还是我应该通过回归模型计算的数据?
【问题讨论】:
标签:
python
machine-learning
cross-validation
k-fold
【解决方案1】:
K-Fold 交叉验证简介
K-Fold 交叉验证将训练数据集分成 k 个不同的相等部分,
也称为“褶皱”。每个折叠依次被视为一个测试集(也
称为“验证集”),而其余的 k - 1 个块成为训练集。
该模型通过迭代 k - 1 个块进行训练并测试生成的模型
在验证集块上,测量一些指标,例如准确、标准
偏差等。该过程重复k次,之后所有模型的平均值
计算评估以确定最终的模型评估。
总而言之,K-fold 交叉验证可以通过以下步骤实现:
随机打乱初始数据集。
- 将数据集拆分为 k 个折叠。
-
对于每一折:
(a) 设置第一折为测试数据集。
(b) 将剩余的折叠设置为训练数据集。
(c) 使用训练集进化模型并使用模型评估测试
数据集。
(d) 重复 k 次。
计算 k 个测试数据集评估的模型评估平均值。
您正在验证您的模型,即您正在尝试了解您的模型在捕获原始数据中的基本模式和关系的能力 - 因此您用于训练的数据将是您的原始数据(训练意味着您将其输入模型以使其能够学习),而验证数据是您输入模型的数据,以查看它对训练数据的学习程度。 基本的 k 折交叉验证思想不是在模型之前在训练期间已经看到的数据上对其进行测试。
特别是您的案例
您有带有标签的数据,每个实例都是“对”:污染数据 -> 伦敦航空公司数据。假设你有 100 对独特的配对 - 你会喂例如将 80 个这样的配对放入您的模型进行训练(如果原始数据污染值为 a,伦敦航空公司标签为 b),其余 20 个您将用于验证 - 您为模型提供污染数据并检查模型是否返回了与污染数据对应的正确 londonair 数据标签(如果原始数据污染值为a,那么标签应该根据模型是什么?)。重复上面介绍中所述的过程,然后平均结果,这将反映您的模型准确性。