统计学习2:重采样

Posted by Zephyr on Friday, August 2, 2024

统计-重采样

我们经常会遇到样本量有限的这种情况,因此需要引入 重采样 来提高堆模型预测准确性的评估。

重采样的本质

重采样是利用有限的样本数据通过重复随机抽样的方式生成新的数据集,以便在样本量不足或分布假设不明确的情况下,更准确地估计统计量的额抽样分布和模型的预测性能。

重采样算法

在样本量不足的时候,我们往往能很容易计算出训练误差,但是测试误差会被低估,但是测试误差是衡量模型好坏的关键指标,因此徐可以用两种方法来解决:

  1. 对用于计算训练误差的数学公式进行调整,给样本加一个权重。
  2. 采用 (Hold-Out)方法,将原始数据集划分成 训练集测试集 训练集用于训练模型,用测试集来计算测试误差。

从回归问题来看

验证集法

把样本集随机拆成两份,一份用于训练模型,另一份用于验证模型,用验证误差来代替真实的测试误差。

image.png

回归分析 中,我们用 马力 来预测 每加仑英里数 ,其中注意到二者有明显非线性关系,自然想到用 $马力^2$ $马力^3$ 来回归,同时观测 p-value 的值来看关系是否显著。

我们可以使用 验证集法 来判断这种关系。

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

为了进一步验证这一趋势,右图展示了进行10次数据集划分的情况,每次划分都得到了不同的训练集和测试集。尽管具体每组数据集上的MSE存在差异,但整体趋势保持一致。这表明无论数据集如何划分,模型指数的选择对于性能的影响都有一定的规律。

image.png

通过对比左右两图,我们可以得出结论:单纯的线性模型(即指数为1的模型)不足以精确地拟合这个汽车数据集

留一交叉验证和K-折交叉验证

验证集法存在两个缺点:

  1. 对测试误差的估计有很大波动。
  2. 验证集法使用部分数据来训练模型,容易导致欠拟合。

为了解决这个,我们引申出了交叉验证

留一交叉验证

LOOCV 我们每次只使用一个样本点做验证集,其余的全是训练集。

image.png

这个方法的好处是最大利用数据集进行训练。这种仅仅依赖于 一个样本点 估计方法,在理论上是对参数的 无偏估计 ,但是波动很大,我们需要将每个样本点都执行这个步骤,然后获得 $n$个不同的均方误差,计算这些均方误差的平均值,作为对最后测试集误差的最终估计。

我们可以在线性回归和多项式回归模型中,如果存在特定的表达式,可以直接用来计算测试误差的均值,无需重复进行模型拟合。

$$ CV_{(n)} = \frac{1}{n}\Sigma^n_{i = 1}(\frac{y_i - \hat{y_i}}{1-h_i})^2 $$

其中 $n$ 是样本总数, $h_i$ 是第 $i$ 个样本点的杠杆值, $\hat{y_i}$ 是第 $i$个样本点的预测值。

K-折交叉验证

LOOCV的耗时太长了,因此我们可以将整个样本集随机均匀划分成 $k$个子集,每次迭代中,一个子集用作验证,另外的用作训练集。在这种情况下,留一交叉验证可以看做是 k-折交叉验证的一个特例。

$$ CV_{(k)} = \frac{1}{k}\Sigma^k_{i=1}MSE_i $$

image.png

image.png

保留了准确性的同时,降低了计算复杂度。

一般采用 5-10折交叉验证即可。

误差与方差的权衡

验证集法倾向于高估测试误差,因为它通常只使用大约一半的数据进行模型训练。与此相反,LOOCV由于几乎利用了所有样本进行训练,因此其测试误差的估计值可被视为无偏的。K-折交叉验证则介于这两者之间,它使用的样本数量既少于LOOCV,又远多于验证集法。

从偏差的角度来看,LOOCV在误差预估方面具有优势,因为它最大限度地减少了由于训练样本不足而导致的偏差。

在考虑偏差(bias)的同时,我们也不能忽视方差(variance)的影响。对于LOOCV,尽管我们会为每个样本训练一个模型,但由于每次训练时所用的训练样本仅有一个观测值不同,导致这些模型之间具有很高的相关性。因此,从这些模型中获得的测试误差估计值之间的相关性也很高。相比之下,在K-折交叉验证中,每次用于训练的数据集之间的差异较大,导致不同模型以及它们所生成的测试误差估计值之间的相关性较低。由于当数值之间的相关性较高时,它们的平均值会呈现出更高的波动率,相比之下,低相关性的数值在取平均值时则更

因此,从方差的角度来看,K-折交叉验证相较于LOOCV表现更优秀

从分类问题看

回归问题的误差衡量用均方误差(MSE),衡量分类模型用混淆矩阵

image.png

这是分类的预测值以及真实值的表格,落在对角线上的是模型正确分类的,而其余部分是模型分类错误的。

我们将他分类成

  1. TN:真阴性,实际是假,预测为假,分类正确
  2. TP:真阳性,实际是真,预测是真,分类正确
  3. FN:假阴性,实际是真,预测是假,分类错误
  4. FP:假阳性,实际是假,预测是真,分类错误

通过混淆矩阵,我们可以计算评价质量的指标:

  1. 准确率,用 $\frac{TP + TN }{TP +TN+FN+FP}$来计算,表示的是模型分类正确的比率。
  2. 精确率,是指分类模型为正确预测的正例样本数占所有预测正例样本数的比例。用 $\frac{TP}{FP+TP}$来计算。比如一卡车里面有1000个西瓜,有500个好瓜,模型预测出600个好瓜,实际上只挑对了300个,那精确率就是50%
  3. 召回率:指分类模型正确预测为正例的样本数,也叫灵敏度,用 $\frac{TP}{TP+FN}$来计算。召回率越高,表示模型将实际为正例的样本全部预测为正例的能力越强。(不过假如刚才那个挑西瓜案例,我将1000个西瓜都认为是好瓜,那他也是召回率100%)
  4. 特异度:是指对于实际为反例的样本,模型预测为反例的概率,也称为真阴性率。 $\frac{TN}{TN+FP}$.特异度越高,表示模型将实际为反例的样本预测为反例的能力越强。
  5. F1值:F1值是综合考虑精确率和召回率的指标, $\frac{2×(精确率 ×召回率)}{精确率+召回率}$ F1值越高,表示模型的性能越好。

ROC曲线

image.png

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

再如这图

image.png

左图和右图分别展示了使用多项式回归模型和KNN回归处理同一数据集的结果。其中,蓝色线条代表训练集的误差,棕色线条代表真实的误差,而黑色线条则反映了10-折交叉验证的误差情况。

随着模型复杂度的增加(如图中多项式指数的提高或KNN中K值的减小),训练误差往往会呈现出整体单调下降的趋势。然而,这种趋势并不能真实反映模型在未知数据上的表现。相比之下,10-折交叉验证误差能够更好地评估模型的泛化能力。它不仅呈现出预期的U形状态,而且与真实的测试误差形态相近。

BootStrap方法

自助法在量化统计量不确定性方面有显著作用。

在现实生活中,我们往往不能大量抽样,很难从一个总体中反复抽样出不同的训练集,因此bootstrap方法就是从总体中抽样出一个样本,再在这个样本中反复抽样来生成新的数据集,通过这个来估计 $\mu$ 和 $\sigma$

左面是实验模拟出的一大堆数据集之后做出的分布,右面是用bootstrap方法求出的数据分布,可以看到整体差异不是特别明显。

image.png

image.png