如何解释核密度估计中的带宽值?

机器算法验证 内核平滑 密度估计
2022-04-11 03:33:12

我不确定如何解释内核密度估计中带宽参数的值。假设我的值范围从 1 到 20。我需要如何设置带宽,以便每个内核的范围超过两个。例如,如果我想将内核设置在点 10 以上,那么内核的范围应该是 [9,11],如果高于 15,那么内核应该是 [14,16]。那仅仅是2的带宽吗?目标是赋予带宽一些意义。

1个回答

为简单起见,让我们假设我们正在谈论一些非常简单的内核,比如三角内核:

K(x)={1|x|if x[1,1]0otherwise

回想一下,在用于估计密度的核密度估计中,我们结合了以点f^hnhxi

f^h(x)=1ni=1nKh(xxi)=1nhi=1nK(xxih)

注意我们的意思是我们想用因子重新缩放一些与点的差异。大多数内核(不包括高斯)都限制在范围外的点,它们将返回等于零的密度。换句话说,是内核的尺度参数,它的范围从更改为xxihxxih(1,1)(xih,xi+h)h(1,1)(h,h)

这在下图中进行了说明,其中点用于估计具有不同带宽的内核密度(顶部的彩色点标记各个值,彩色线是内核,灰线是整体内核估计)。如您所见,使内核变窄,而使它们变宽。更改会影响单个内核和最终内核密度估计,因为它是单个内核的混合分布更高使核密度估计更平滑,而随着变小,它导致核更接近单个数据点,并且随着n=7hh<1h>1hhhh0你最终会得到一堆为中心的Direc delta 函数。xi

H=0.5, h=1, h=1.5, h=2 的 KDE 估计示例

以及生成绘图的 R 代码:

set.seed(123)
n <- 7
x <- rnorm(n, sd = 3)

K <- function(x) ifelse(x >= -1 & x <= 1, 1 - abs(x), 0)

kde <- function(x, data, h, K) {
  n <- length(data)
  out <- outer(x, data, function(xi,yi) K((xi-yi)/h))
  rowSums(out)/(n*h)
} 

xx = seq(-8, 8, by = 0.001)
for (h in c(0.5, 1, 1.5, 2)) {
  plot(NA, xlim = c(-4, 8), ylim = c(0, 0.5), xlab = "", ylab = "",
       main = paste0("h = ", h))
  for (i in 1:n) {
    lines(xx, K((xx-x[i])/h)/n, type = "l", col = rainbow(n)[i])
    rug(x[i], lwd = 2, col = rainbow(n)[i], side = 3, ticksize = 0.075)
  }
  lines(xx, kde(xx, x, h, K), col = "darkgray")
}

有关更多详细信息,您可以查看 Silverman (1986) 和 Wand & Jones (1995) 的精彩介绍性书籍。


西尔弗曼,BW (1986)。用于统计和数据分析的密度估计。CRC/查普曼和霍尔。

Wand, MP 和 Jones, MC (1995)。内核平滑。伦敦:查普曼和霍尔/CRC。