核回归和loess类似,都是非参数回归方法。
整体来说,核回归和loess有点接近,但又有点不同,首先,loess对于在x0估计y的取值,它会选择划定一个范围,通过该范围的样本去估计x0的y值,但是核回归不一样,它会考虑选择全部样本去估计这个x0的y值。另一方面,loess在估计关于x0的y值,计算各点的权重需要先计算距离再通过权重函数计算,而loess则直接把核函数作为权重函数,因为核函数本身也可以作为概率密度函数,所以省去了loess中的归一化等处理,简化了过程。
下面我们选择高斯核函数,用一个具体的例子说明核回归的思想。
高斯核函数和正态分布函数一个样,呈一个钟型曲线,这样,假如我们把拟合点x0作为高斯核函数的期望,就可以直接得到样本的各个x在高斯核函数的取值作为它们的一个权重。
以上的过程,对应loess中的决定拟合点的数量和位置,确定关于各个拟合点的各个样本权重(因为我们采取所有样本进行估计,所以不需要选择每个拟合点附近距离最近的n个点这个步骤)。
接下来就是loess中的拟合步骤了。在loess中,我们可以进行一次或者二次的多项式拟合,而在核回归同样也是这样(不过一般在核回归中采取零次或一次),首先写出核回归的d次多项式:
f ^ ( x ) = β 0 + β 1 ( X i − x ) + . . . + β d ( X i − x ) d \hat f(x) = \beta_0 + \beta_1 (X_i - x) + ... + \beta_d (X_i - x)^d f^(x)=β0+β1(Xi−x)+...+βd(Xi−x)d
这个拟合的d次多项式是比较特别的,可以看到系数对应的是x_i - x而不是单纯的x,另一方面,关于权重函数,同样也是用x_i - x:
K h ( X i − x ) = 1 h K ( X i − x h ) K_h(X_i - x) = \frac{1}{h} K(\frac{X_i - x}{h}) Kh(Xi−x)=h1K(hXi−x)
当然,不论是拟合的多项式还是权重函数,自变量都是x,但是写成x_i - x,我认为这是为了反映出比起自变量x的位置,x与其他样本点才是更重要的,更能反映出权重和拟合的多项式的关系的变量。换个角度来思考,我们现在做的是非参数估计,没有做关于总体分布的任何假设,全部的分析都是基于样本进行的,所以其实我们做出来的估计都是基于样本的,在这个角度看来,如果我们要估计某一点x的取值,比起它所在的绝对坐标,它和其他样本的相对坐标才是分析它的取值的关键,这是我认为多项式和权重函数都采取x_i - x作为自变量的原因。
分析了核回归拟合的多项式之后,下一步就是分析怎么解出多项式的参数beta了,可以知道,我们的目标就是拟合一个多项式,使得多项式尽可能地拟合附近的样本,所以和loess一样,这里也是采取局部线性回归的方式,结合权重定义损失函数:
∑ i = 1 n K h ( X i − x ) ( Y i − β 0 − β 1 ( X i − x ) − . . . − β d ( X i − x ) d ) 2 \sum_{i=1}^{n} K_h(X_i - x) (Y_i - \beta_0 - \beta_1(X_i - x) - ... - \beta_d (X_i - x)^d)^2 i=1∑nKh(Xi−x)(Yi−β0−β1(Xi−x)−...−βd(Xi−x)d)2
使损失函数达到最小,就能得到得到参数。
就像前面提到的,核回归的拟合多项式一般取零次或者一次,也就是d=0或者d=1,针对这两种情况,我们可以解出各自的最优参数表达式,并重新代近拟合方程,得到各自的表达式:
f ^ N W ( x ) = ∑ i = 1 n K h ( X i − x ) Y i ∑ i = 1 n K h ( X i − x ) \hat f_{NW}(x) = \frac{\sum_{i=1}^{n} K_h(X_i - x)Y_i} {\sum_{i=1}^{n} K_h(X_i - x)} f^NW(x)=∑i=1nKh(Xi−x)∑i=1nKh(Xi−x)Yi
f ^ L L ( x ) = 1 n ∑ i = 1 n [ s ^ 2 ( x ) − s ^ 1 ( x ) ( X i − x ) ] K h ( X i − x ) Y i s ^ 2 ( x ) s ^ 0 ( x ) − s ^ 1 ( x ) 2 \hat f_{LL}(x) = \frac{1}{n} \sum_{i=1}^n \frac{[\hat s_2(x) - \hat s_1(x)(X_i - x)] K_h(X_i - x)Y_i}{\hat s_2(x) \hat s_0(x) - \hat s_1 (x)^2} f^LL(x)=n1i=1∑ns^2(x)s^0(x)−s^1(x)2[s^2(x)−s^1(x)(Xi−x)]Kh(Xi−x)Yi
s ^ r ( x ) = 1 n ∑ i = 1 n ( X i − x ) r K h ( X i − x ) \hat s_r (x) = \frac{1}{n} \sum_{i=1}^n (X_i - x)^r K_h(X_i - x) s^r(x)=n1i=1∑n(Xi−x)rKh(Xi−x)
第一条式子对应d=0的情况,也称为Nadaraya-Watson kernel estimator,第二条式子对应d=1,也称为local linear kernel estimator
关于拟合多项式选择零次和一次的区别,下图会更清晰地反映出来:
![](https://img-blog.csdnimg.cn/20190709221453921.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2plc3NleXVsZQ==,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190709221434958.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2plc3NleXVsZQ==,size_16,color_FFFFFF,t_70)
从上图可以看到,Nadaraya-Watson kernel estimator对拟合点拟合的结果认为这个区间的y值都是常数,所以是一条水平的直线,而下图则拟合出一条倾斜的直线,更接近真实的情况。但是必须说明的是,我们要做的不是像loess那样在一个个小区间拟合出一条直线再整合,我们在核回归中要做的是通过拟合多项式从而估计在拟合点x的取值y,我们要估计的是在拟合多项式上的一个点。
想浏览更多关于数学、机器学习、深度学习的内容,可浏览本人博客