R语言 LOOCV(Leave One Out Cross-Validation)
LOOCV(Leave One Out Cross-Validation) 是一种交叉验证方法,其中每个观察值被视为验证集,其余(N-1)观察值被视为训练集。在LOOCV中,模型的拟合和预测是使用一个观察验证集完成的。此外,对每个观测值重复N次,作为验证集。模型被拟合,模型被用来预测一个观察值。这是 K-折交叉验证 的一个特例,其中折的数量与观察的数量相同(K=N)。这种方法有助于减少 偏差 和 随机性。 该方法旨在减少平均平方误差率并防止过度拟合。在R编程中执行LOOCV是非常容易的。
数学表达式
LOOCV涉及到每个观测值的一个折叠,即每个观测值本身就扮演着验证集的角色。(N-1)个观测值起着训练集的作用。在最小二乘法线性中,单个模型的性能成本与单个模型相同。在LOOCV中,在实现LOOCV方法时可以避免模型的重新拟合。 MSE(Mean squared error) 是通过对完整数据集的拟合来计算的。
在上述公式中,**h i **代表一个观测值对其自身拟合的影响程度,即在0和1之间,它惩罚了残差,因为它除以一个小数字。它使残差膨胀。
R语言 的实现
数据集
Hedonic是一个关于波士顿人口普查区价格的数据集。它包括犯罪率、25,000平方英尺的住宅地段的比例、平均房间数、1940年以前建造的业主单位的比例等共15个方面。它预装了R语言中的 Eclat 软件包。
输出
对数据集进行留一交叉验证(LOOCV)
通过使用数据集中的特征或变量训练模型,在数据集上使用留一交叉验证(LOOCV)。
输出
- 模型age.glm
age.glm模型有505个自由度,空值偏差为400100,残值偏差为120200。AIC为4234。
- 平均平方误差
第一个误差250.2985是训练集的 平均平方误差(MSE) ,第二个误差250.2856是留一交叉验证(LOOCV)。产生的输出数字几乎相等。
- 不同模型的误差
误差在不断增加。这说明高阶多项式在一般情况下是不利的。
LOOCV的优点如下
- 它没有将一些观测值用于训练与验证集的随机性。在验证集方法中,每个观测值都被考虑用于训练和验证,所以无论运行多少次都没有随机性,变异性较小。
- 由于训练集的大小为n-1,所以它的偏差比验证集方法小。在整个数据集上。因此,与验证集方法相比,对测试误差的高估减少了很多。
LOOCV的缺点如下
- 如果数据集很大,训练N次模型会导致昂贵的计算时间。