豆瓣9.6分统计学神作ISL之第五章读书笔记,带你系统学习交叉验证(cross-validation)和自助法(bootstrap)


1. 原文内容概要

这一章节的核心议题是在面临样本量相对有限的情况下,如何巧妙地运用重采样的技术,以提高对模型预测准确性的评估我们将深入探讨重采样方法(resampling methods)的应用,以揭示在数据稀缺的环境中,如何通过重新组合和利用现有样本,实现对模型性能更精确、更可靠的评估。这一过程不仅有助于我们更全面地了解模型在各种情况下的表现,还能够为模型优化提供有力的数据支持,从而在实际应用中取得更好的效果。

2. 算法知识总结

作者开篇即直截了当地指出了重采样方法的本质,即利用有限的样本数据通过重复随机抽样的方式生成新的数据集,以便在样本量不足或分布假设不明确的情况下,更准确地估计统计量的抽样分布和模型的预测性能(They involve repeatedly drawing samples from a training set and refitting a model of interest on each sample in order to obtain additional information about the fitted model)。这种方法的核心在于通过模拟的方式增加样本量,从而提高统计推断的稳健性和可靠性。

本章节作者主要介绍了两种重采样方法:交叉验证(cross-validation)自助法(bootstrap)

2.1 交叉验证(cross-validation)

在样本量不足时,训练误差虽然容易计算,但往往会低估真实的测试误差。由于测试误差是衡量模型性能的关键指标,我们需要寻找有效的方法来更准确地预估模型在样本不充裕时的性能。
一般来说,有两种方法来解决上面的问题
1)通过对计算训练误差的传统数学公式进行适当的修正和调整(比如对样本权重的调整等),我们可以尝试直接获得一个近似的测试误差估计。(Some methods make a mathematical adjustment to the training error rate in order to estimate the test error rate)
2)这一部分,我们将重点介绍“留一手”(Hold-Out)方法,这是一种常用的策略来估计模型的测试误差。通过留一手方式,我们将原始数据集划分为训练集和验证集(或称为测试集)。训练集用于训练模型,而验证集则用于评估模型的性能,即计算测试误差。这种方法的核心思想是将部分数据保留下来,不参与模型的训练过程,以确保评估结果的客观性和准确性。(In this section, we instead consider a class of methods that estimate the test error rate by holding out a subset of the training observations from the fitting process, and then applying the statistical learning method to those held out observations)

2.1.1 验证集法

验证集法(The Validation Set Approach)非常简单粗暴,即把样本集随机拆成两份,一份用于训练模型,另一份用于验证模型,用验证误差来代替真实的测试误差(It involves randomly dividing the available set of observations into two parts, a training set and a validation set or hold-out set)
image.png

在本章中,作者以“汽车数据集”为例,展示了如何使用 h o r s e p o w e r horsepower horsepower(马力)来预测 m p g mpg mpg(每加仑英里数)。鉴于这两个变量之间存在非线性关系,在第三章(下)中,我们采用 h o r s e p o w e r horsepower horsepower h o r s e p o w e r 2 horsepower^2 horsepower2作为预测因子,并取得了良好的预测效果。自然地,我们可能会思考是否加入 h o r s e p o w e r 3 horsepower^3 horsepower3会进一步提升预测性能。在第三章中,我们可以通过观察p-value的大小来决定是否引入新的预测因子,如果 h o r s e p o w e r 3 horsepower^3 horsepower3对应的p-value不再显著,则表明其可能不适合加入模型在本章中,我们将采用一种不同的方法——【验证集】法,来进行这一判断

下面的左图展示了仅进行一次数据集划分的情况。随着模型中 h o r s e p o w e r horsepower horsepower的指数从1增加到10,每个指数对应一个模型。在训练集上拟合模型后,我们在测试集上评估其性能(即均方误差MSE)。从图中可以观察到,当指数从1增加到2时,MSE显著降低,表明模型性能有了明显提升。然而,当指数从2继续增加到10时,MSE的变化变得逐渐平缓,这意味着并不是指数越高模型性能就越好。

为了进一步验证这一趋势,右图展示了进行10次数据集划分的情况,每次划分都得到了不同的训练集和测试集。尽管具体每组数据集上的MSE存在差异,但整体趋势保持一致。这表明无论数据集如何划分,模型指数的选择对于性能的影响都有一定的规律。(Furthermore, all ten curves indicate that there is not much benefit in including cubic or higher-order polynomial terms in the model)

image.png
通过对比左右两图,我们可以得出结论:单纯的线性模型(即指数为1的模型)不足以精确地拟合这个汽车数据集。(Based on the variability among these curves, all that we can conclude with any confidence is that the linear fit is not adequate for this data)

验证集法存在两个显著的缺点
1)正如上面右侧图所示,该方法对于测试误差的估计具有较大的波动性,这意味着每次数据划分都可能导致不同的测试结果,使得误差估计不够稳定。
2)由于验证集法仅使用部分数据用于模型训练,大概率会导致模型欠拟合,因此得到的验证误差率往往会高于真实的测试误差率,这进一步影响了模型的性能评估。

为了解决上述两个问题,引入了交叉验证方法。

2.1.2 留一交叉验证

留一交叉验证(Leave-One-Out Cross-Validation,LOOCV)与之前的验证集法在某些方面相似,但关键在于数据的使用方式。验证集法是将数据集分为两部分,一部分用于训练,另一部分用于验证。而留一交叉验证则采取了不同的策略:它每次只使用一个样本点作为验证集,而将剩余的所有样本点用作训练(However, instead of creating two subsets of comparable size, a single observation ( x 1 , y 1 ) (x_1, y_1) (x1,y1) is used for the validation set, and the remaining observations ( x 2 , y 2 ) , . . . , ( x n , y n ) {(x_2, y_2), . . . , (x_n, y_n)} (x2,y2),...,(xn,yn)make up the training set)。这样做的好处在于能够最大限度地利用数据进行模型训练,从而缓解验证集法可能高估真实测试误差率的问题

然而,由于留一交叉验证仅依赖一个样本点来估计测试误差,虽然这种估计在理论上可以视为无偏的,但其波动率往往较大为了减小这种波动,我们采用重复这一过程对每个样本点都执行上述的验证步骤,从而获得n个不同的均方误差(MSE)。最后,我们计算这些MSE的平均值,作为对测试误差的最终估计。这种方法不仅提高了测试误差估计的稳定性,还有效地解决了验证集法中存在的测试误差估计波动大的问题。
image.png

LOOCV相较于验证集法有两个明显的优点
1)能够最大化利用现有的样本数据,对于测试误差的评估更加准确、更少偏差。因为在LOOCV中,我们使用包含 n − 1 n-1 n1个观测值的训练集反复拟合统计学习方法,这些观测值与整个数据集中的观测值几乎一样多。(First, it has far less bias. In LOOCV, we repeatedly fit the statistical learning method using training sets that contain _n - _1 observations, almost as many as are in the entire data set)
2)验证集法中的验证误差对样本集划分方式极为敏感,每次划分都可能导致不同的结果。然而,在LOOCV(留一交叉验证)中,无论重复多少次,每次的结果都是一致的,因此消除了随机性因素的影响。(Second, in contrast to the validation approach which will yield different results when applied repeatedly due to randomness in the training/validation set splits, performing LOOCV multiple times will always yield the same results: there is no randomness in the training/validation set splits)

LOOCV的一个显著缺点是计算量大且耗时较长。当样本数量为 n n n时,模型需要拟合 n n n次,这对于计算资源来说是一个不小的挑战。尽管在某些特定的模型(如线性回归模型和多项式回归模型)中,我们可以利用“魔法公式”(特定的数学公式)来简化计算过程,从而直接得到测试误差的均值,但大多数情况下,我们仍然需要重复拟合模型 n n n次,这无疑增加了计算的复杂性

所谓的“魔法公式”,是指在线性回归模型和多项式回归模型中,存在特定的数学表达式,可以直接用来计算测试误差的均值,而无需重复进行模型的拟合过程
image.png
其中 n n n是样本总数量, h i h_i hi是第 i i i个样本点的杠杆值(在第三章的读书笔记中有讲到), y ^ i \hat{y}_i y^i是第 i i i个样本点的预测值。

为了解决LOOCV计算量大的问题,引入了K-折交叉验证。

2.1.3 K-折交叉验证

K-折交叉验证(K-Fold Cross-Validation)将整个样本集随机均分为 k k k个子集。在每次迭代中,其中一个子集被用作验证集,而剩余的 k − 1 k-1 k1个子集则合并作为训练集来拟合模型。随后,使用拟合得到的模型在验证集上进行预测,从而估计测试误差。这一过程针对每个子集都重复进行,因此我们可以获得 k k k个不同的测试误差估计值。最终,通过对这些估计值取平均,我们得到更为稳定和可靠的测试误差估计。值得注意的是,留一交叉验证实际上是K-折交叉验证的一个特例,其中 k k k等于样本数。在实际应用中, k k k通常取值为5或10,这样可以在保证评估准确性的同时,相对留一验证法,极大地减少了计算时间和资源消耗。
image.png
下图展示了K-折交叉验证的稳定性。尽管LOOCV具有确定性,而K-折交叉验证在一定程度上存在不确定性,但从图示中可以看出,这种不确定性对结果的影响相对较小
image.png

为了验证交叉验证在预测测试误差方面的准确性,并与LOOCV(留一交叉验证)的预测结果进行比较,作者利用三个模拟数据集进行了实验。模拟数据的优势在于我们能够确切知道其真实的测试误差,从而为评估提供了准确的基准。从以下三个图中可以明显看出,10折交叉验证的预估准确度非常高,其曲线几乎与LOOCV的曲线重合,并且与真实的测试误差曲线之间的差异也比较小。此外,通过比较三条曲线上的最低测试误差点,我们可以发现它们之间的差异同样不大。图中,蓝色线代表真实的测试误差黑色虚线表示LOOCV的预测结果而橘色线则代表10折交叉验证的预测结果
image.png

2.1.4 误差与方差的权衡

除了计算量远小于LOOCV这一显著优点外,K-折交叉验证还具有另一个重要优势:它通常能够提供更精确的测试误差预估为啥?原因就在偏差与方差的权衡上

前面已经讨论过,验证集法倾向于高估测试误差,因为它通常只使用大约一半的数据进行模型训练。与此相反,LOOCV由于几乎利用了所有样本进行训练,因此其测试误差的估计值可被视为无偏的K-折交叉验证则介于这两者之间,它使用的样本数量既少于LOOCV,又远多于验证集法。从偏差的角度来看,LOOCV在误差预估方面具有优势,因为它最大限度地减少了由于训练样本不足而导致的偏差。

在考虑偏差(bias)的同时,我们也不能忽视方差(variance)的影响对于LOOCV,尽管我们会为每个样本训练一个模型,但由于每次训练时所用的训练样本仅有一个观测值不同,导致这些模型之间具有很高的相关性因此,从这些模型中获得的测试误差估计值之间的相关性也很高。相比之下,在K-折交叉验证中,每次用于训练的数据集之间的差异较大,导致不同模型以及它们所生成的测试误差估计值之间的相关性较低由于当数值之间的相关性较高时,它们的平均值会呈现出更高的波动率,相比之下,低相关性的数值在取平均值时则更稳定(Since the mean of many highly correlated quantities has higher variance than does the mean of many quantities that are not as highly correlated, the test error estimate resulting from LOOCV tends to have higher variance than does the test error estimate resulting from k-fold CV)。因此,从方差的角度来看,K-折交叉验证相较于LOOCV表现更优秀

因此,问题的关键在于如何有效地权衡偏差与方差(Bias-Variance Trade-Off)。具体而言,这需要我们根据具体情况来确定合适的K值。通常情况下,5和10是被广泛认可且经过多次实验验证的较优选择,它们在保持较低偏差的同时,也能够实现相对稳定的方差表现。(Typically, given these considerations, one performs k-fold cross-validation using _k _= 5 or _k _= 10, as these values have been shown empirically to yield test error rate estimates that suffer neither from excessively high bias nor from very high variance)

2.1.5 在分类问题上的应用

前面都是讲的因变量 Y Y Y是数值型的情况(回归问题),在离散型的情况(分类问题)下交叉检验也是适用的。

2.1.5.1 如何评价分类模型的精度

在回归问题下,衡量误差一般用 M S E MSE MSE;在分类问题下,这个问题就比较复杂。在“信贷数据集”中,违约的人占比只有3%左右,如果我们仅从整体样本分类结果的准确性来评判模型精度是不够的。比如现在就有一个很“白痴”的分类器,它不作任何处理,直接默认每一个人都是不违约的,可想而知,按照整体样本的分类精度来看,这个分类器的精度竟然有97%。于是统计学家们想出了一个全新的评价体系,首先是混淆矩阵(confusion matrix)
image.png
上图中横向表示模型预测的是否违约标签(Yes或者No),纵向表示样本真实的是否违约标签(Yes或者No),正对角线上的数字(9644、81)表示预测的标签与真实的标签一样,负对角线上的数字(252、23)表示预测的标签与真实的标签不一样。这四个位置分别有四个代号:9644(True Negative,TN),81(True Positive,TP),252(False Negative,FN),23(False Positve,FP)
image.png
通过混淆矩阵,我们可以计算多种衡量模型拟合质量的指标:
1) 准确率(Accuracy):是指分类模型正确预测的样本数占总样本数的比例。计算公式为:准确率 = (TP + TN) / (TP + TN + FP + FN),其中TP表示真正例,即模型正确预测为正例的样本数;TN表示真反例,即模型正确预测为反例的样本数;FP表示假正例,即模型错误预测为正例的样本数;FN表示假反例,即模型错误预测为反例的样本数。准确率越高,表示模型的整体预测能力越好。
2) 精确率(Precision):是指分类模型正确预测为正例的样本数占所有预测为正例的样本数的比例。计算公式为:精确率 = TP / (TP + FP),其中TP表示真正例,即模型正确预测为正例的样本数;FP表示假正例,即模型错误预测为正例的样本数。精确率越高,表示模型将实际为正例的样本正确预测为正例的能力越强。
3)召回率(Recall)或者叫灵敏度(Sensitivity):是指分类模型正确预测为正例的样本数占所有实际为正例的样本数的比例。计算公式为:召回率 = TP / (TP + FN),其中TP表示真正例,即模型正确预测为正例的样本数;FN表示假反例,即模型错误预测为反例的样本数。召回率越高,表示模型将实际为正例的样本全部预测为正例的能力越强。
4) 特异度(Specificity):是指对于实际为反例的样本,模型预测为反例的概率,也称为真阴性率。计算公式为:Specificity = TN / (TN + FP),其中TN表示真反例,即模型正确预测为反例的样本数;FP表示假正例,即模型错误预测为正例的样本数。Specificity越高,表示模型将实际为反例的样本预测为反例的能力越强。
5)F1值(F1-score):F1值是综合考虑精确率和召回率的指标,计算公式为:F1值 = 2 * (精确率 * 召回率) / (精确率 + 召回率)。F1值越高,表示模型的性能越好。
image.png
画ROC曲线的步骤可分为:
1)准备数据:首先,需要准备用于绘制ROC曲线的数据。这些数据通常包括真正例率(True Positive Rate,TPR)和假正例率(False Positive Rate,FPR)。这些数据可以通过调整分类器的阈值来获得,每次调整阈值时,计算出相应的TPR和FPR。
2)绘制ROC曲线:接下来,使用真正例率和假正例率数据绘制ROC曲线。在二维坐标系中,横轴表示假正例率(FPR),纵轴表示真正例率(TPR)。根据计算出的TPR和FPR数据点,使用折线连接各点。
3)计算AUC值:在绘制完ROC曲线后,需要计算ROC曲线下的面积(Area Under the Curve,AUC),以量化分类器的性能。AUC值越接近于1,表示分类器的性能越好;AUC值越接近于0.5,表示分类器的性能越差。
4)评估分类器性能:根据计算出的AUC值和其他评价指标(如精度、召回率等),评估分类器的性能。如果分类器的性能不理想,可能需要调整分类器参数或使用其他算法。

以下是对混淆矩阵中不同统计量的各种术语的汇总,这些术语在多个领域和文献中广泛出现,大家应该会经常遇到。
image.png

2.1.5.2 交叉验证的应用

作者采用多项式回归模型对模拟数据集进行分类。由于使用模拟数据,我们能够准确了解真实的决策边界(图中紫色虚线所示)。从结果可见,随着多项式指数的增加,模型所拟合的决策边界(黑色实线)逐渐逼近真实的决策边界。然而,如何选择最佳的多项式指数成为了一个关键问题。与回归问题相似,我们可以通过交叉验证来确定最佳的多项式指数,从而优化模型的分类性能。
image.png

下图中,左图和右图分别展示了使用多项式回归模型和KNN回归处理同一数据集的结果。其中,蓝色线条代表训练集的误差,棕色线条代表真实的误差,而黑色线条则反映了10-折交叉验证的误差情况。
通过观察可以发现,训练误差确实不能单独作为筛选最佳模型的依据。随着模型复杂度的增加(如图中多项式指数的提高或KNN中K值的减小),训练误差往往会呈现出整体单调下降的趋势。然而,这种趋势并不能真实反映模型在未知数据上的表现。相比之下,10-折交叉验证误差能够更好地评估模型的泛化能力。它不仅呈现出预期的U形状态,而且与真实的测试误差形态相近。
此外,通过10-折交叉验证得到的最低误差点与真实测试误差的最低点也较为接近。这证明了10-折交叉验证不仅在回归问题上表现出色,在分类问题中同样具有良好的应用效果。因此,我们可以信赖这种方法来评估分类模型性能并选择最佳模型。
image.png

2.2 自助法(bootstrap)

自助法(bootstrap)方法在量化统计量不确定性方面具有显著效用(The bootstrap is a widely applicable and extremely powerful statistical tool bootstrap that can be used to quantify the uncertainty associated with a given estimator or statistical learning method)

作者做了两个实验,在一个实验中,他用模拟函数自己模拟出了1000份不同的数据集,再用这1000份数据集去估计一个统计量 α α α(具体怎么算不重要,这不是重点),得到1000个 α α α的估计值 α ^ 1 \hat{α}_1 α^1 α ^ 2 \hat{α}_2 α^2,……, α ^ 1000 \hat{α}_{1000} α^1000,再用这1000个估计量去算平均值 α ˉ = 0.59 \barα=0.59 αˉ=0.59,并计算出其对应的标准差, S E ( α ^ ) = 0.083 SE(\hat{α}) =0.083 SE(α^)=0.083。因为这是模拟数据,所以作者知道统计量 α α α的真实值等于0.6,可以看出,从总体样本中抽取足够多的样本集,可以对统计量做很好地预估。

然而,在现实生活中,我们往往只拥有一个训练数据集,很难从一个庞大的总体中反复抽取不同的训练集。在这种情况下,Bootstrap方法的应用就显得尤为重要。其基本思路是,将现有的唯一训练集视为总体,从中进行重复抽样以生成新的数据集。利用这些新生成的数据集,我们可以多次估计目标统计量,并计算其均值和标准差。作者遵循这一思路,利用上述模拟数据进行了实验,结果显示所得的标准差 S E ( α ^ ) = 0.087 SE(\hat{α}) = 0.087 SE(α^)=0.087,与第一种方法得到的结果非常接近,验证了Bootstrap方法的有效性。下图直观地展示了第一种方法和第二种方法所得结果的对比,二者之间的差异并不明显。

image.png
下图详细展示了抽样的完整过程我们并非从总体中反复获取独立的数据集,而是通过从原始数据集中不断重抽样来得到不同的数据集。(Rather than repeatedly obtaining independent data sets from the population, we instead obtain distinct data sets by repeatedly sampling observations from the original data set)

image.png

3. 引用

image.png

  • 37
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值