模型的低偏差和高方差是什么意思?

机器算法验证 机器学习 方差 偏见 偏差-方差-权衡
2022-03-25 13:23:23

我是机器学习领域的新手。根据我的定义,

偏差:它仅表示您的模型参数与基础总体的真实参数之间的距离。

Bias(θ^m)=E(θ^m)θ

其中θ^m是我们的估计器,而θ是基础分布的真实参数。

方差:表示它对来自同一群体的新实例的泛化程度。

当我说我的模型具有低偏差时,这意味着模型参数与生成总体的真实基础参数非常相似。所以它也应该很好地推广到来自同一群体的新实例。那么它怎么会有高方差呢?

4个回答

关键是参数估计是随机变量如果您从总体中多次抽样并每次都拟合一个模型,那么您会得到不同的参数估计值。因此,讨论这些参数估计的期望和方差是有意义的。

如果他们的期望等于他们的真实值,你的参数估计是“无偏的” 。但它们仍然可以有低或高的方差这与拟合特定样本的模型的参数估计值是否接近真实值不同!

例如,您可以假设预测变量均匀分布在某个区间上,例如我们现在可以拟合不同的模型,我们来看四个:x[0,1]y=x2+ϵ

  • 如果我们,那么参数将有偏差,因为它的参数将具有大于零的期望值。(当然,我们没有项的参数,所以这个不存在的参数可以说是一个常数零,这也不同于的真实值。)yxx21
  • 如果我们仅,我们的模型就是真正的数据生成过程 (DGP)。我们的参数估计将是无偏的并且具有最小的方差。yx2
  • 如果我们,那么我们就有了真正的 DGP,但我们也有一个多余的预测变量我们的参数估计将是无偏的(截距和系数),但它们会有更高的方差。yxx2x0x1x2
  • 最后,如果我们,同样成立:我们有无偏的参数估计,但方差更大。yxx2x3

以下是 1000 次模拟的参数估计值(底部的 R 代码)。请注意点云如何围绕真实值聚集(或不聚集),以及它们的分布程度。

偏差方差

概念上的问题是我们通常看不到这些随机变量。我们所看到的只是我们人口中的一个样本,一个模型,以及我们参数估计的单一实现。这将是情节中的一个点。要记住的关键是,如果我们的模型指定错误,那么方差会更大。当然,如果我们有很大的方差,那么我们的模型很容易与真实的 DGP 相距甚远,并且无论我们进行推理还是预测,都会产生很大的误导。

代码:

n_sims <- 1e3
n_sample <- 20

param_estimates <- list()
param_estimates[[1]] <- matrix(nrow=n_sims,ncol=2)
param_estimates[[2]] <- matrix(nrow=n_sims,ncol=2)
param_estimates[[3]] <- matrix(nrow=n_sims,ncol=3)
param_estimates[[4]] <- matrix(nrow=n_sims,ncol=4)

for ( ii in 1:n_sims ) {
    set.seed(ii)    # for reproducibility
    xx <- runif(n_sample,0,1)
    yy <- xx^2+rnorm(n_sample)
    param_estimates[[1]][ii,] <- summary(lm(yy~xx))$coefficients[,1]
	param_estimates[[2]][ii,] <- summary(lm(yy~I(xx^2)))$coefficients[,1]
    param_estimates[[3]][ii,] <- summary(lm(yy~xx+I(xx^2)))$coefficients[,1]
	param_estimates[[4]][ii,] <- summary(lm(yy~xx+I(xx^2)+I(xx^3)))$coefficients[,1]
}

beeswarm_matrix <- function(MM, amount=0.3, add.boxplot=FALSE, add.beanplot=FALSE, names=NULL, pt.col=NULL, ...) {  
    # beeswarm plots of matrix columns
    plot(c(1-2*amount,ncol(MM)+2*amount),range(MM,na.rm=TRUE),xaxt="n",type="n",...)
    axis(1,at=1:ncol(MM),labels=if(is.null(names)){colnames(MM)}else{names},...)
    if ( add.boxplot ) boxplot(MM, add=TRUE, xaxt="n", outline=FALSE, border="grey", ...)
    if ( add.beanplot ) {
        require(beanplot)
        sapply(1:ncol(MM),function(xx)beanplot(MM[,xx],add=TRUE,what=c(0,1,1,0),xaxt="n",
            col=c(rep("lightgray",3),"lightgray"),border=NA, at=xx,...))
    }
    pt.col.mat <- matrix(if(is.null(pt.col)){"black"}else{pt.col},nrow=nrow(MM),ncol=ncol(MM),byrow=TRUE)
    points(jitter(matrix(1:ncol(MM),nrow=nrow(MM),ncol=ncol(MM),byrow=TRUE),amount=amount),MM,col=pt.col.mat,...)
}

opar <- par(las=1,mfrow=c(2,2),mai=c(.5,.5,.1,.1),pch=19)
    beeswarm_matrix(param_estimates[[1]],add.beanplot=TRUE,xlab="",ylab="",cex=0.5,
        names=c("Intercept",expression(x)))
    beeswarm_matrix(param_estimates[[2]],add.beanplot=TRUE,xlab="",ylab="",cex=0.5,
        names=c("Intercept",expression(x^2)))
    beeswarm_matrix(param_estimates[[3]],add.beanplot=TRUE,xlab="",ylab="",cex=0.5,
        names=c("Intercept",expression(x),expression(x^2)))
    beeswarm_matrix(param_estimates[[4]],add.beanplot=TRUE,xlab="",ylab="",cex=0.5,
        names=c("Intercept",expression(x),expression(x^2),expression(x^3)))
par(opar)

非正式地

  • 偏差是您的估算器与真实值的平均距离。“平均”隐藏了一点,即在实践中您只会做出一个估计,即使偏差很小,这也可能与真实值相差很远。的模型参数与真实参数的距离不是对此的合理描述,因为它错过了平均点

  • 方差是估计量与其平均值的离散度(平方)的量度。这再次隐藏了您将进行单一估计的要点。它还忽略了来自高偏差的错误。因此,您将它推广到新实例的程度也不是对此的合理描述,因为它错过了衡量与错误数字的离散度的点

您不希望其中任何一个或两者都很高,因为这可能会对任何估计的价值产生怀疑。您可以将它们结合起来:方差加上偏差的平方给出了预期的均方误差,因此取该总和的平方根可以衡量单次使用估计器的潜在误差的规模。价值。

假设有一台切割木板的机器。
目标是让每块木板长 4 米。
假设一台机器至少切割一打这样的木板。
您现在测量木板的长度。


偏见

“机器偏斜度高”是指板子总是太长或总是太短。
如果木材切割机“偏斜度低”意味着板子一半时间剪得太长,太短了很长的一半时间。

方差

如果木板的长度几乎从不相同,则木材切割机具有“高差异”。其中一块板长3.2米,另一块板长5.14米。如果木板通常与其他木板长度相同,则
木材切割机具有“差异度”。

方差和偏差的组合

低方差 高方差
低偏差 董事会几乎是完美的 板子的尺寸都不同,但平均板子长度是正确的
高偏压 所有的板子都正好是 6 米长,而不是想要的 4 米 板子的大小都不同,平均长度也不接近 4 米

[偏差] 仅表示您的模型参数与基础总体的真实参数之间的距离。

这是不正确的,而且写得很糟糕。

偏差是参数的真实值与参数估计值的平均值之间的差异

表示它对来自同一群体的新实例的泛化效果如何。

那更糟。方差是估计量与估计量平均值之差的平方的平均值。