什么是交叉验证? 比较机器学习模型
已发表: 2021-07-21交叉验证是数据科学家的宝贵工具。
它有助于构建更准确的 机器学习 模型并评估它们在独立测试数据集上的工作情况。
交叉验证易于理解和实施,使其成为比较不同模型的预测能力(或技能)并选择最佳模型的首选方法。 当可用数据量有限时,它是有益的,并且是检查预测模型在实践中如何工作的好方法。
交叉验证用于保护模型免受过度拟合,尤其是在可用数据量有限的情况下。 它也称为旋转估计或样本外测试,主要用于模型目标为预测的设置。
你可知道? 如果一个模型对训练数据的建模非常好,以至于对其在新数据上的性能产生负面影响,则该模型被认为是“过度拟合”。
此重采样过程还用于比较不同的机器学习模型,并确定它们解决特定问题的效果如何。 换句话说,交叉验证是一种用于评估机器学习模型技能的方法。
简单地说,在交叉验证的过程中,原始数据样本被随机分成几个子集。 机器学习模型在所有子集上训练,除了一个。 训练后,通过对剩余子集进行预测来测试模型。
在许多情况下,使用不同的子集执行多轮交叉验证,并对它们的结果进行平均以确定哪个模型是一个好的预测器。
为什么交叉验证很重要?
在可用数据量有限的情况下,交叉验证至关重要。
假设您需要预测自行车轮胎被刺破的可能性。 为此,您收集了现有轮胎的数据:轮胎的使用年限、行驶里程数、骑手的体重以及之前是否被刺穿。
要创建预测模型,您将使用此(历史)数据。 你需要对这些数据做两件事——训练算法和测试模型。
你可知道? 在机器学习中,算法和模型并不相同。 模型是机器学习算法学习到的东西。
由于您只有有限数量的可用数据,因此使用所有数据来训练算法是幼稚的。 如果这样做,您将没有任何数据可用于测试或评估模型。
重用训练集作为测试集并不是一个好主意,因为我们需要评估模型在未经训练的数据上的准确性。 这是因为训练背后的主要目标是让模型准备好处理真实世界的数据。 而且您的训练数据集不太可能包含模型将遇到的所有可能的数据点。
一个更好的主意是使用数据的前 75%(三个块)作为训练数据集,最后 25%(一个块)作为测试数据集。 这将允许您比较不同算法对测试数据的分类程度。
但是,当然,你怎么知道使用前 75% 的数据作为训练集,剩下的 25% 作为测试集是最好的方法呢?
相反,您可以使用前 25% 的数据进行测试; 或者,您可以将数据的第三块用作测试数据集,将剩余的数据块用作训练数据集。
提示:使用机器学习软件自动执行任务并做出准确的预测。
因此,一种称为k 折交叉验证的交叉验证使用数据集的所有(四个)部分作为测试数据,一次一个,然后总结结果。
例如,交叉验证将使用数据的前三个块来训练算法,并使用最后一个块来测试模型。 然后它会记录模型对测试数据的执行情况。
记录性能或准确性后,它将使用数据的第 1、2、4 个块进行训练,并使用第 3 个块进行测试。 该过程继续进行,直到所有块都被用作测试数据一次。 计算所有结果的平均值以评估模型的性能。
在上面的例子中,数据被分成了四个块。 因此,这种交叉验证称为4 折交叉验证。 如果把它分成十个块,那就是10-fold cross-validation 。
简而言之,交叉验证对于模型选择很有用,并且可以毫不费力地检查模型对新数据的泛化程度。
换句话说,它有助于确定模型的预测误差。 它还用于比较不同机器学习方法的性能或准确性,例如支持向量机 (SVM)、K 近邻 (KNN)、线性回归或逻辑回归。
以下是数据科学家喜欢交叉验证的更多原因:
- 让他们在不牺牲任何子集的情况下使用所有数据(对保持方法无效)
- 揭示数据和算法的一致性
- 有助于避免过拟合和欠拟合
交叉验证也用于调整 超参数 通过称为随机网格搜索交叉验证的技术来构建机器学习模型。
交叉验证的类型
交叉验证方法可以大致分为两类:穷举法和非穷举法。
顾名思义,详尽的交叉验证方法力求测试所有可能的方法,将原始数据样本划分为训练集和测试集。 另一方面,非穷举方法不会计算将原始数据划分为训练集和评估集的所有方法。
以下是五种常见的交叉验证类型。
1.坚持法
保留方法是基本的交叉验证方法之一,其中原始数据集分为两部分 - 训练数据和测试数据。 这是一种非详尽的方法,正如预期的那样,模型在训练数据集上进行训练并在测试数据集上进行评估。
在大多数情况下,训练数据集的大小是测试数据集的两倍,这意味着原始数据集以 80:20 或 70:30 的比例拆分。 此外,在将数据划分为训练集和验证集之前,数据会被随机打乱。

但是,这种交叉验证方法也有一些缺点。 由于该模型是在不同的数据点组合上进行训练的,因此每次训练时都会显示出不同的结果。 此外,我们永远无法完全确定所选的训练数据集是否代表整个数据集。
如果原始数据样本不是太大,那么测试数据也有可能包含一些关键信息,模型将无法识别这些信息,因为它没有包含在训练数据中。
但是,如果您急于训练和测试模型并拥有大型数据集,则保持交叉验证技术是理想的选择。
2. K折交叉验证
k折交叉验证方法是holdout方法的改进版本。 它为模型的分数带来了更多的一致性,因为它不取决于我们如何选择训练和测试数据集。
它是一种非穷举的交叉验证方法,顾名思义,就是将数据集分成 k 次分割,并执行 k 次holdout 方法。
例如,如果 k 的值等于 2,则将有两个大小相等的子集。 在第一次迭代中,模型在一个子样本上进行训练并在另一个子样本上进行验证。 在第二次迭代中,模型在先前迭代中用于验证的子集上进行训练,并在另一个子集上进行测试。 这种方法称为2-fold cross-validation 。
同样,如果 k 的值等于 5,则该方法称为5 折交叉验证方法,将涉及 5 个子集和 5 次迭代。 此外,k 的值是任意的。 通常,k 的值设置为 10。如果您对选择值感到困惑,建议您使用相同的值。
k-fold 交叉验证过程从将原始数据集随机拆分为 k 个折叠或子集开始。 在每次迭代中,模型都在整个数据集的 k-1 个子集上进行训练。 之后,在第 k 个子集上测试模型以检查其性能。
重复这个过程,直到所有的 k-folds 都作为评估集。 每次迭代的结果均取平均值,称为交叉验证准确度。 交叉验证准确度被用作性能指标来比较不同模型的效率。
k 折交叉验证技术通常会产生偏差较小的模型,因为来自原始数据集的每个数据点都将出现在训练和测试集中。 如果数据量有限,此方法是最佳选择。
然而,正如预期的那样,这个过程可能很耗时,因为算法必须从头开始重新运行 k 次。 这也意味着它的计算量是holdout方法的k-1倍。
3.分层k折交叉验证
由于我们在 k 折交叉验证中随机打乱数据并将其拆分为折,因此我们有可能最终得到不平衡的子集。 这可能会导致训练有偏差,从而导致模型不准确。
例如,考虑一个二元分类问题,其中两种类型的类标签中的每一种都包含 50% 的原始数据。 这意味着这两个类别以相等的比例存在于原始样本中。 为了简单起见,我们将两个类命名为 A 和 B。
在打乱数据并将其拆分为折叠时,我们很有可能最终得到一个折叠,其中大部分数据点来自 A 类,只有少数来自 B 类。这样的子集被视为不平衡子集,并且可以导致创建不准确的分类器。
为了避免这种情况,使用称为分层的过程对褶皱进行分层。 在分层中,数据被重新排列以确保每个子集都是整个数据集的良好表示。
在上面的二元分类示例中,这意味着最好划分原始样本,以便折叠中的一半数据点来自 A 类,其余来自 B 类。
4.leave-p-out交叉验证
Leave-p-out cross-validation (LpOCV)是一种穷举方法,其中从 n 表示的数据样本总数中取出 p 个数据点。
该模型在 np 个数据点上进行训练,然后在 p 个数据点上进行测试。 对原始样本中 p 的所有可能组合重复相同的过程。 最后,对每次迭代的结果进行平均,以达到交叉验证的准确性。
5. 留一法交叉验证
留一法交叉验证 (LOOCV)方法是 LpOCV 的简化版本。 在这种交叉验证技术中,p 的值设置为 1。 因此,这种方法不那么详尽。 然而,这种方法的执行既昂贵又耗时,因为模型必须拟合 n 次。
还有其他交叉验证技术,包括重复随机二次抽样验证、嵌套交叉验证和时间序列交叉验证。
交叉验证的应用
交叉验证的主要应用是评估机器学习模型的性能。 这有助于比较机器学习方法并确定哪种方法最适合解决特定问题。
例如,假设您正在考虑使用k 近邻 (KNN) 或主成分分析 (PCA)来执行光学字符识别。 在这种情况下,您可以使用交叉验证根据每种方法错误分类的字符数来比较两者。
交叉验证也可用于特征选择,以选择对预测输出贡献最大的特征。
交叉验证的局限性
交叉验证的主要挑战是需要过多的计算资源,尤其是在 k-fold CV 等方法中。 由于该算法必须从头开始重新运行 k 次,因此需要 k 次以上的计算来评估。
另一个限制是围绕看不见的数据的限制。 在交叉验证中,测试数据集是用于评估模型性能的未知数据集。 从理论上讲,这是检查模型在用于实际应用时如何工作的好方法。
但是,在实践中永远不可能有一套完整的看不见的数据,也永远无法预测模型未来可能遇到的数据类型。
假设建立了一个模型来预测个人感染特定传染病的风险。 如果模型是根据仅涉及特定人群(例如 20 多岁的女性)的研究数据进行训练的,那么当它应用于一般人群时,与交叉验证的准确性相比,预测性能可能会有很大差异.
此外,只有在原始样本集中控制人为偏差时,交叉验证才会产生有意义的结果。
交叉验证拯救
交叉验证模型构建是创建具有更高准确性或性能的机器学习应用程序的绝佳方法。 像 k 折交叉验证这样的交叉验证技术可以在不牺牲测试拆分的情况下估计模型的性能。
它们还消除了不平衡数据拆分导致的问题; 简而言之,它们可以使数据科学家减少对运气的依赖,而更多地依赖迭代。
有一部分机器学习试图模仿人脑的功能。 它被称为深度学习,如果可能的话,通用人工智能将需要它的决策能力。