核密度分析(KDE)原理总结

社会主义新天地 提交于 2020-01-25 00:56:04

粗浅的说,核密度分析的目的是获得能够近似表示数据分布的密度函数的每一点的估计值,从而表示出数据的分布情况。

从频率直方图开始

频率直方图(frequency histogram)亦称频率分布直方图,是统计学中表示频率分布的图形。在直角坐标系中,用横轴表示随机变量的取值,横轴上的每个小区间对应一个组的组距,作为小矩形的底边;纵轴表示频率与组距的比值,并用它作小矩形的高,以这种小矩形构成的一组图称为频率直方图。

一个很生动的图

在这里插入图片描述

注:图片来自[维基百科]

频率直方图的特点是每一个小矩形的面积表示落入该小区间的频率,所以纵轴表示:
\frac{频率}{组距}
对应于上图,就是说彩色矩形的面积之和为1。

然后,我们运用微分的思想,使等分区间增加,于是组距取的愈来愈小,这样以来,矩形宽度越来越小,于是我们可以自然的想到,在极限情况下它就会变成一条线,频率直方图的阶梯型状就将逼近于概率密度曲线,能近似的反映了概率密度曲线的大致形状。


概率密度函数

现在我们来到了概率密度函数,概率密度函数用于描述概率密度曲线,上文已经说到概率密度曲线其实就是频率直方图的等分区间趋于极限的情况。

所以随机变量的取值落在某个区域之内的概率则为概率密度函数在这个区域上的积分。

我们来看一个正态分布的概率密度曲线图示。

Image result for 正态分布

很明显曲线下方的面积之和也就是+f(x)\int_{-\infty}^{+\infty}f(x)为1。

观察图像,我们可以发现,某点密度函数的大小就反映了这个点小邻域区间的概率的大小。


核密度分析

一维核密度分析

文中开头已经提到核密度分析的作用是发现数据的分布状况,我们首先考虑一维数据,现在有nn个数据:
x1,x2,x3,...,xn x_1,x_2,x_3,...,x_n
核密度分析的目的就是估计这nn个数据的概率密度函数,根据上述分析和微分,我们可以列出下式:
F(xi1<x<xi)=xi1xif(x)dx F(x_{i-1}<x<x_i) = \int_{x_{i-1}}^{x_i}f(x)dx

f(xi)=limh0F(x+h)F(xh)2h f(x_i) = \lim^{}_{h \to 0}\frac{F(x+h)-F(x-h)}{2h}
现在自然出现了一个问题,我们并不知道分布函数的表达式,我们引入经验分布函数:
Fn(t)=1ni=1n1xit F_n(t)=\frac{1}{n}\sum_{i=1}^n1_{x_i\leq t}
经验分布函数的意思是Fn(t)F_n(t)的大小可以用nn次观测中xitx_i\leq t出现的次数与nn的比值来近似描述。更多的原理不作介绍。

把经验分布函数代入(3)(3)式,有:
f(xi)=limh0Number of(xhxix+h)2Nh f(x_i) = \lim_{h \to 0}^{}\frac{Number\ of(x-h \leq x_i \leq x+h)}{2Nh}
=limh012Nhi=1N1xhxix+h=\lim_{h \to 0}^{}\frac{1}{2Nh}\sum_{i=1}^{N}1_{x-h \leq x_i \leq x+h}

在我们实际计算的时候,必须给hh一个确定的值,hh值既不能太大又不能太小,太大不满足h0h \to 0的要求,太小使用的点太少,误差会很大。其实这个hh也就是我们最头疼的带宽。

到了这一步,我们已经可以写出f(x)f(x)的表达式了。
f(x)=12NHi=1N1xihxxi+h f(x) = \frac{1}{2NH}\sum_{i=1}^{N}1_{x_i-h \leq x \leq x_i+h}

核函数

我们可以进一步对上面的表达式做些文章。
f(x)=12Nhi=1N1xihxxi+h=12Nhi=1NK(xxih) f(x) = \frac{1}{2Nh}\sum_{i=1}^{N}1_{x_i-h \leq x \leq x_i+h}=\frac{1}{2Nh}\sum_{i=1}^N K(\frac{|x-x_i|}{h})
其中:
t0,t1,K(t)=1 t \geq 0,且t \leq 1时,K(t)=1
那么:
f(x)dx=12Nhi=1NK(xxih)dx \int f(x)dx = \frac{1}{2Nh}\sum_{i=1}^N \int K(\frac{|x-x_i|}{h})dx
=1Ni=1N12K(t)dt=12K(t)dt = \int\frac{1}{N}\sum_{i=1}^N \frac{1}{2} K(t)dt=\int\frac{1}{2} K(t)dt

K0(t)=K(t)2 K_0(t)=\frac{K(t)}{2}

Ko(t)K_o(t)即成为核函数,根据概率密度函数的定义,现在我们只需要使:
K0(t)dt=1 \int K_0(t)dt = 1

t0,t1,K0(t)=12 t \geq 0,且t \leq 1时,K_0(t)=\frac{1}{2}

成立即可。

所以此时f(x)f(x)的表达式变成了:
f(x)=1Nhi=1NK0(xxih) f(x) = \frac{1}{Nh}\sum_{i=1}^N K_0(\frac{|x-x_i|}{h})

t0,t1,K0(t)=12 t \geq 0,且t \leq 1时,K_0(t)=\frac{1}{2}

以上是对一维核函数的分析,参考了知乎回答

于是哪些函数的积分等于1,哪些函数就可以作为我们的核函数了,常用的核函数如高斯核函数。

二维核密度分析

二维核密度是对一维核密度的扩展,过程分析与其类似,其中结果(NN个二维点)可以表示为:
f(x,y)=1Nh2i=1NK0(distih) f(x,y) = \frac{1}{Nh^2}\sum_{i=1}^N K_0(\frac{dist_i}{h})
下面我们结合Arcgis核密度估计讲解二维核密度分析。

一个例子

ArcGIS工具箱提供了核密度分析,根据以上的分析,我们能够明白这应该是一个二维的核密度分析,下面我针对ArcGIS点要素核密度分析使用的核函数和带宽h的选择过程进行介绍。

效果:
在这里插入图片描述
核函数为:
K0(t)=3π((1t2))2 K_0(t) = \frac{3}{\pi}((1-t^2))^2
概率密度预测值为:
Density=1nradius2i=1npopiK0(distiradius) Density = \frac{1}{n*radius^2}\sum_{i=1}^n pop_i K_0(\frac{dist_i}{radius})
其中radiusradius为搜索带宽,popipop_i为给定的populationpopulation字段,nn为二维点个数。

ArcGIS官方文档中分母并没有nn,尽管最后成图效果没什么区别,但我感觉数学上应该有点问题。

带宽为:
SearchRadius=0.9min(SD,1ln(2)Dm)n0.2 SearchRadius = 0.9*min(SD,\sqrt{\frac{1}{\ln(2)}}*D_m)*n^{-0.2}
若未使用 populationpopulation 字段,则DmD_m为到平均中心距离的中值,nn 是二维点数,SDSD是标准距离

如果提供了 populationpopulation 字段,则DmD_m为到加权平均中心距离的中值。nnpopulationpopulation 字段值的总和,SDwSD_w是加权标准距离

(加权)平均中心指nn个二维点的(加权)平均值。

标准距离SDSD的计算公式为:
SD=i=1n(xiXˉ)2n+i=1n(yiYˉ)2n+i=1n(ziZˉ)2n SD = \sqrt{\frac{\sum_{i=1}^n(x_i-\bar X)^2}{n}+\frac{\sum_{i=1}^n(y_i-\bar Y)^2}{n}+\frac{\sum_{i=1}^n(z_i-\bar Z)^2}{n}}
其中:

  • xi,yi,zix_i,y_i,z_i 是要素$ i$ 的坐标
  • Xˉw,Yˉw,Zˉw{\bar X_w,\bar Y_w, \bar Z_w} 表示平均中心
  • n是要素总数。

加权标准距离SDwSD_w的计算公式为:
SDw=i=1nwi(xiXˉw)2i=1nwi+i=1nwi(yiYˉw)2i=1nwi+i=1nwi(ziZˉw)2i=1nwi SD_w = \sqrt{\frac{\sum_{i=1}^n w_i(x_i-\bar X_w)^2}{\sum_{i=1}^{n}w_i}+\frac{\sum_{i=1}^nw_i(y_i-\bar Y_w)^2}{\sum_{i=1}^{n}w_i}+\frac{\sum_{i=1}^nw_i(z_i-\bar Z_w)^2}{\sum_{i=1}^{n}w_i}}
其中:

  • wiw_i 是要素$ i$ 的权重
  • Xˉw,Yˉw,Zˉw{\bar X_w,\bar Y_w, \bar Z_w} 表示加权平均中心。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!