Answers:
我将使用0.632估算器,但这将是一个漫长的发展:
假设我们要预测与使用函数,其中可以取决于所使用的数据来估计一些参数例如
预测误差的简单估计为,其中是某些损失函数,例如平方误差损失。这通常称为训练错误。Efron等。称为表观错误率或替换率。这不是很好,因为我们使用数据来拟合。这导致被向下偏置。您想知道模型在预测新值方面做得如何。
通常,我们使用交叉验证作为估计预期样本外预测误差的简单方法(我们的模型对不在训练集中的数据的处理效果如何?)。
一种流行的方法是进行折交叉验证。将您的数据分成组(例如10个)。对于每个组,将模型拟合到其余的组,并在第组进行测试。我们的交叉验证的额外样本预测误差仅为平均值其中是一些指数函数,用于指示观测分区被分配和是预测值不在使用数据个组。
当时,该估计器对于真实的预测误差几乎是无偏的,并且具有较大的方差,而对于较大的计算量更大。因此,我们再次看到偏差与方差的权衡在起作用。
代替交叉验证,我们可以使用引导程序来估计额外样本的预测误差。引导程序重采样可用于估计任何统计信息的采样分布。如果我们的训练数据,那么我们可以认为服用从这组bootstrap样本(带替换),其中每个是一组样本。现在,我们可以使用引导程序样本来估计样本外预测误差:,其中是模型拟合到模型的处的预测值
但是,如果我们具有高度过拟合的预测函数(即),那么即使.632估计量也将向下偏置。.632+估算器设计为和之间的偏差较小。 其中 ,其中是无信息错误率,通过评估预测模型对所有可能的组合进行估算目标和预测变量。
在此,衡量相对过拟合率。如果没有过度拟合(R = 0,则当)时,它等于.632估计量。
您将在本文1的第3节中找到更多信息。但总而言之,如果您将随机抽取并替换为的数字称为,则平均包含大约独特元素。
推理如下。我们通过从采样次(随机且替换)来填充。考虑一个特定的索引。
然后:
和
这是正确的(直觉上,由于我们进行替换采样,所以概率不取决于)
从而
您还可以进行以下模拟,以凭经验检查近似值的质量(取决于):
n <- 100
fx01 <- function(ll,n){
a1 <- sample(1:n, n, replace=TRUE)
length(unique(a1))/n
}
b1 <- c(lapply(1:1000,fx01,n=100), recursive=TRUE)
mean(b1)
1. Bradley Efron和Robert Tibshirani(1997)。交叉验证的改进:.632+引导程序方法。美国统计协会杂志,第一卷。92,第438号,第548--560页。
以我的经验为基础,主要基于模拟,仅由于使用不正确的准确性评分规则(即正确地“分类”的比例)引起的严重问题,才需要0.632和0.632+的引导程序变体。当您使用适当的(例如,基于偏差或Brier评分)或半适当的(例如, -index = AUROC)评分规则时,标准的Efron-Gong乐观引导程序就可以正常工作。
这些答案非常有用。我找不到用数学证明它的方法,所以我写了一些效果很好的Python代码:
from numpy import mean
from numpy.random import choice
N = 3000
variables = range(N)
num_loop = 1000
# Proportion of remaining variables
p_var = []
for i in range(num_loop):
set_var = set(choice(variables, N))
p=len(set_var)/float(N)
if i%50==0:
print "value for ", i, " iteration ", "p = ",p
p_var.append(p)
print "Estimator of the proportion of remaining variables, ", mean(p_var)