R语言 LOOCV(Leave One Out Cross-Validation)

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) 是通过对完整数据集的拟合来计算的。

R编程中的LOOCV(Leave One Out Cross-Validation)

在上述公式中,**h i **代表一个观测值对其自身拟合的影响程度,即在0和1之间,它惩罚了残差,因为它除以一个小数字。它使残差膨胀。

R语言 的实现

数据集

Hedonic是一个关于波士顿人口普查区价格的数据集。它包括犯罪率、25,000平方英尺的住宅地段的比例、平均房间数、1940年以前建造的业主单位的比例等共15个方面。它预装了R语言中的 Eclat 软件包。

# Installing the package 
install.packages("Ecdat") 
      
# Loading package 
library(Ecdat) 
      
# Structure of dataset in package 
str(Hedonic)
R

输出

R编程中的LOOCV(Leave One Out Cross-Validation)

对数据集进行留一交叉验证(LOOCV)

通过使用数据集中的特征或变量训练模型,在数据集上使用留一交叉验证(LOOCV)。

# Installing Packages
install.packages("Ecdat")
install.packages("boot")
install.packages("dplyr")
install.packages("ggplot2")
install.packages("caret")
  
# Loading the packages
library(Ecdat)
library(boot)
library(dplyr)
library(ggplot2)
library(caret)
  
# Model Building
age.glm <- glm(age ~ mv + crim + zn + indus 
               + chas + nox + rm + tax + dis
               + rad + ptratio + blacks + lstat,
               data = Hedonic)
age.glm 
  
# Mean Squared Error
cv.mse <- cv.glm(Hedonic, age.glm)
cv.msedelta
  
# Generating error of 
# Different models
cv.mse = rep(0,5)
for (i in 1:5)
{
  age.loocv <- glm(age ~ mv + poly(crim, i)
                   + zn + indus + chas + nox
                   + rm + poly(tax, i) + dis
                   + rad + ptratio + blacks
                   + lstat, data = Hedonic)
  cv.mse[i] = cv.glm(Hedonic, age.loocv)delta[1]
}
  
cv.mse
R

输出

  • 模型age.glm

R编程中的LOOCV(Leave One Out Cross-Validation)

age.glm模型有505个自由度,空值偏差为400100,残值偏差为120200。AIC为4234。

  • 平均平方误差

R编程中的LOOCV(Leave One Out Cross-Validation)

第一个误差250.2985是训练集的 平均平方误差(MSE) ,第二个误差250.2856是留一交叉验证(LOOCV)。产生的输出数字几乎相等。

  • 不同模型的误差

R编程中的LOOCV(Leave One Out Cross-Validation)

误差在不断增加。这说明高阶多项式在一般情况下是不利的。

LOOCV的优点如下

  • 它没有将一些观测值用于训练与验证集的随机性。在验证集方法中,每个观测值都被考虑用于训练和验证,所以无论运行多少次都没有随机性,变异性较小。
  • 由于训练集的大小为n-1,所以它的偏差比验证集方法小。在整个数据集上。因此,与验证集方法相比,对测试误差的高估减少了很多。

LOOCV的缺点如下

  • 如果数据集很大,训练N次模型会导致昂贵的计算时间。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册