精华内容
下载资源
问答
  • 局部多项式回归拟合是对两维散点图进行平滑的常用方法,它结合了传统线性回归的简洁性和非线性回归的灵活性。当要估计某个响应变量值时,先从其预测变量附近取一个数据子集,然后对该子集进行线性回归或二次回归,...
    局部多项式回归拟合是对两维散点图进行平滑的常用方法,它结合了传统线性回归的简洁性和非线性回归的灵活性。当要估计某个响应变量值时,先从其预测变量附近取一个数据子集,然后对该子集进行线性回归或二次回归,回归时采用加权最小二乘法,即越靠近估计点的值其权重越大,最后利用得到的局部回归模型来估计响应变量的值。用这种方法进行逐点运算得到整条拟合曲线。 
    

    在R语言中进行局部多项式回归拟合是利用loess函数,我们以cars数据集做为例子来看下使用方法。该数据中speed表示行驶速度,dist表示刹车距离。用loess来建立模型时重要的两个参数是span和degree,span表示数据子集的获取范围,取值越大则数据子集越多,曲线越为平滑。degree表示局部回归中的阶数,1表示线性回归,2表示二次回归,也可以取0,此时曲线退化为简单移动平均线。这里我们设span取0.4和0.8,从下图可见取值0.8的蓝色线条较为平滑。 

    ------------------------
    plot(cars,pch=19)
    model1=loess(dist~speed,data=cars,span=0.4)
    lines(cars$speed,model1$fit,col='red',lty=2,lwd=2)
    model2=loess(dist~speed,data=cars,span=0.8)
    lines(cars$speed,model2$fit,col='blue',lty=2,lwd=2)
    ------------------------

    当模型建立后,也可以类似线性回归那样进行预测和残差分析 
    ------------------------
    x=5:25
    predict(model2,data.frame(speed=x))
    plot(model2$resid~model2$fit)
    ------------------------
    R语言中另一个类似的函数是lowess,它在绘图上比较方便,但在功能上不如loess强大和灵活。 

    ------------------------ 
    plot(cars,pch=19) 
    lines(lowess(cars),lty=2,lwd=2) 
    ------------------------ 

    LOESS的优势是并不需要确定具体的函数形式,而是让数据自己来说话,其缺点在于需要大量的数据和运算能力。LOESS作为一种平滑技术,其目的是为了探寻响应变量和预测变量之间的关系,所以LOESS更被看作一种数据探索方法,而不是作为最终的结论。
    展开全文
  • lls{ # SIMPLE BUT NAIVE IMPLEMENTATION of# local constant or local linear with kernel symmetric beta kernel# (1-u^2)^iker and bandwidth h, evaluated at "grid".#method = 0, local linear fit;...

    lls

    { # SIMPLE BUT NAIVE IMPLEMENTATION of

    # local constant or local linear with kernel symmetric beta kernel

    # (1-u^2)^iker and bandwidth h, evaluated at "grid".

    #method = 0, local linear fit;

    #     = 1, local constant fit

    #iker is an integer.

    #result: grid, est

    ngrid

    res

    for (j in 1:ngrid)

    { w

    x0 0]                   #local data

    y0 0]

    w 0]

    w

    coef

    if(method==1)

    res[j]

    else

    res[j]

    }

    list(grid=grid,est=res)

    }

    ep=function(t)

    (3/4)*(1-t^2)*(1-t^2>=0)

    locw=function(T,t,h){

    y=T-t;Kh=ep(y/h)/h;

    s1=t(Kh)%*%y;s2=t(Kh)%*%(y^2);

    return(Kh*(s2-s1*y)/sum(Kh*(s2-s1*y)));

    }

    展开全文
  • 非参数统计之局部多项式回归

    千次阅读 2020-04-26 01:15:24
    局部多项式回归 局部多项式回归是非参数回归的一种方法,主要是由于Nadaraya−WatsonNadaraya-WatsonNadaraya−Watson估计方法的加权是基于整个样本点,而且往往在边界上的估计效果并不理想。 局部线性回归 解决上述...

    局部多项式回归

    局部多项式回归是非参数回归的一种方法,主要是由于 N a d a r a y a − W a t s o n Nadaraya-Watson NadarayaWatson估计方法的加权是基于整个样本点,而且往往在边界上的估计效果并不理想。

    局部线性回归

    解决上述问题的办法就是用一个变动的函数取代局部固定的权重。局部线性回归就是在待估计点 x x x的领域内用一个线性函数 Y i = β 0 + β 1 X i Y_i=\beta_0+\beta_1X_i Yi=β0+β1Xi, X i ∈ [ x − h , x + h ] X_i\in[x-h,x+h] Xi[xh,x+h]来取代 Y i Y_i Yi的平均, β 0 , β 1 \beta_0,\beta_1 β0,β1是局部参数,首先回顾一下Nadaraya-Watson估计:
    m ^ h = n − 1 ∑ i = 1 n K h ( x − X i ) Y i n − 1 ∑ j = 1 n K h ( x − X j ) = 1 n ∑ i = 1 n ( K h ( x − X i ) n − 1 ∑ j = 1 n K h ( x − X j ) ) Y i = 1 n ∑ i = 1 n W h i ( x ) Y i \begin{aligned} \hat{m}_h &= \frac{n^{-1}\sum_{i=1}^nK_h(x-X_i)Y_i}{n^{-1}\sum_{j=1}^nK_h(x-X_j)}\\ &=\frac{1}{n}\sum_{i=1}^n \left( \frac{K_h(x-X_i)}{n^{-1}\sum_{j=1}^nK_h(x-X_j)}\right)Y_i \\ &=\frac{1}{n}\sum_{i=1}^nW_{hi}(x)Y_i \end{aligned} m^h=n1j=1nKh(xXj)n1i=1nKh(xXi)Yi=n1i=1n(n1j=1nKh(xXj)Kh(xXi))Yi=n1i=1nWhi(x)Yi
    其中 K h ( x − X i ) = 1 h K ( x − X i h ) K_h(x-X_i)=\frac{1}{h}K\left( \frac{x-X_i}{h} \right) Kh(xXi)=h1K(hxXi).接下来我们考虑一个估计量 a ≡ m h ^ ( x ) a\equiv \hat{m_h}(x) amh^(x)来使得目标函数(误差平方和) 1 2 ∑ i = 1 n ( Y i − a ) 2 \frac{1}{2}\sum_{i=1}^n(Y_i-a)^2 21i=1n(Yia)2达到最小,很明显它的解是:
    ∑ i = 1 n ( Y i − a ) = 0 ∑ i = 1 n Y i = n a a = Y ˉ = m h ^ ( x ) \begin{aligned} \sum_{i=1}^n(Y_i-a)&=0 \\ \sum_{i=1}^nY_i&=na\\ a &= \bar{Y}=\hat{m_h}(x) \end{aligned} i=1n(Yia)i=1nYia=0=na=Yˉ=mh^(x)
    它显然不是 m ( x ) m(x) m(x)的一个好的估计,现在定义权函数 w i ( x ) = K ( ( x i − x ) / h ) w_i(x)=K((x_i-x)/h) wi(x)=K((xix)/h),再使得下述加权平方和达到最小:
    1 2 ∑ i = 1 n w i ( x ) ( Y i − a ) 2 \frac{1}{2}\sum_{i=1}^nw_i(x)(Y_i-a)^2 21i=1nwi(x)(Yia)2
    显然它的解是:
    m h ^ ( x ) = ∑ i = 1 n w i ( x ) Y i ∑ i = 1 n w i ( x ) \hat{m_h}(x)=\frac{\sum_{i=1}^nw_i(x)Y_i}{\sum_{i=1}^nw_i(x)} mh^(x)=i=1nwi(x)i=1nwi(x)Yi
    它刚好就是核回归估计,也说明NW估计是一种由局部加权最小二乘得到的局部常数估计。很明显如果利用线性函数而不是一个常数的话就能得到局部线性回归:
    ∑ i = 1 n { ( Y i − β 0 − β 1 X i ) } 2 w i ( x ) \sum_{i=1}^n\{ (Y_i-\beta_0-\beta_1X_i)\}^2w_i(x) i=1n{(Yiβ0β1Xi)}2wi(x)
    容易得当不存在 w i ( x ) w_i(x) wi(x)时上述解为:
    { β 0 = ∑ Y i n − β 1 ∑ X i n β 1 = n ∑ X i Y i − ∑ X i Y i n ∑ X i 2 − ∑ X i ∑ X i \begin{cases} \beta_0=\frac{\sum Y_i}{n}-\frac{\beta_1\sum X_i}{n} \\ \beta_1=\frac{n\sum X_iY_i-\sum X_iY_i}{n\sum X_i^2-\sum X_i\sum X_i} \end{cases} {β0=nYinβ1Xiβ1=nXi2XiXinXiYiXiYi
    当存在 w i ( x ) w_i(x) wi(x)时上述解为:
    { ∑ w i ( x ) Y i = β 0 ∑ w i ( x ) + β 1 ∑ w i ( x ) X i ∑ w i ( x ) Y i X i = β 0 ∑ w i ( x ) X i + β 1 ∑ w i ( x ) X i 2 \begin{cases} \sum w_i(x)Y_i=\beta_0\sum w_i(x)+\beta_1 \sum w_i(x)X_i \\ \sum w_i(x)Y_iX_i=\beta_0\sum w_i(x)X_i+\beta_1\sum w_i(x)X_i^2 \end{cases} {wi(x)Yi=β0wi(x)+β1wi(x)Xiwi(x)YiXi=β0wi(x)Xi+β1wi(x)Xi2

    局部多项式回归(local polynomial regression)

    如果我们把上述中的常数 a a a换为一个 p p p阶的局部多项式就能得到局部多项式回归.令 x x xw为在其上想要估计 m ( x ) m(x) m(x)的某个固定值.则对于在 x x x一个邻域中的值 u u u,定义多项式
    P x ( u ; a ) = a 0 + a 1 ( u − x ) + a 2 2 ! ( u − x ) 2 + ⋯ + a p p ! ( u − x ) p P_x(u;a)=a_0+a_1(u-x)+\frac{a_2}{2!}(u-x)^2+\cdots+\frac{a_p}{p!}(u-x)^p Px(u;a)=a0+a1(ux)+2!a2(ux)2++p!ap(ux)p
    能够在目标值 x x x的一个邻域用下面的多项式来近似一个光滑回归函数 m ( u ) m(u) m(u):
    m ( u ) ≈ P x ( u ; a ) m(u)\thickapprox P_x(u;a) m(u)Px(u;a)
    有些书籍中的多项式定义为: m ( ⋅ ) m(\cdot) m()
    m ( t ) ≈ m ( x ) + m ′ ( x ) ( t − x ) + ⋯ + m ( p ) ( x ) ( t − x ) p 1 p ! m(t)\approx m(x)+m'(x)(t-x)+\cdots+m^{(p)}(x)(t-x)^p\frac{1}{p!} m(t)m(x)+m(x)(tx)++m(p)(x)(tx)pp!1
    此时的目标函数为:
    min ⁡ β ∑ i = 1 n { Y i − β 0 − β 1 ( X i − x ) − ⋯ − β p ( X i − x ) p } 2 K h ( x − X i ) \min_\beta\sum_{i=1}^n\{Y_i-\beta_0-\beta_1(X_i-x)-\dots-\beta_p(X_i-x)^p \}^2K_h(x-X_i) βmini=1n{Yiβ0β1(Xix)βp(Xix)p}2Kh(xXi)
    其中 β \beta β表示系数向量 ( β 0 , β 1 , … , β p ) T (\beta_0,\beta_1,\dots,\beta_p)^{\rm{T}} (β0,β1,,βp)T.
    X = ( 1 X 1 − x ( X 1 − x ) 2 ⋯ ( X 1 − x ) p 1 X 2 − x ( X 2 − x ) 2 ⋯ ( X 2 − x ) p ⋮ ⋮ ⋮ ⋱ ⋮ 1 X n − x ( X n − x ) 2 ⋯ ( X n − x ) p ) , Y = ( Y 1 Y 2 ⋮ Y n ) X= \begin{pmatrix} 1& X_1-x & (X_1-x)^2 & \cdots & (X_1-x)^p \\ 1& X_2-x & (X_2-x)^2 & \cdots & (X_2-x)^p \\ \vdots & \vdots & \vdots & \ddots & \vdots\\ 1& X_n-x & (X_n-x)^2 & \cdots & (X_n-x)^p \\ \end{pmatrix} , Y= \begin{pmatrix} Y_1 \\ Y_2 \\ \vdots \\ Y_n \\ \end{pmatrix} X=111X1xX2xXnx(X1x)2(X2x)2(Xnx)2(X1x)p(X2x)p(Xnx)p,Y=Y1Y2Yn

    W = ( K h ( x − X 1 ) 0 ⋯ 0 0 K h ( x − X 2 ) ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ K h ( x − X n ) ) , W= \begin{pmatrix} K_h(x-X_1) & 0 & \cdots & 0 \\ 0 & K_h(x-X_2) & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & K_h(x-X_n) \\ \end{pmatrix}, W=Kh(xX1)000Kh(xX2)000Kh(xXn),
    根据加权最小二乘估计可以得到 β ^ \hat{\beta} β^:
    β ^ ( x ) = ( X T W X ) − 1 X T W Y \hat{\beta}(x)=(X^{\rm{T}}WX)^{-1}X^{\rm{T}}WY β^(x)=(XTWX)1XTWY
    利用上篇文章中的数据举个栗子:

    在这里插入图片描述
    上图中,在相同核函数和窗宽的条件下,红线代表了上篇文章讲到的核回归的结果,蓝线代表了本文中局部多项式回归的结果.可以看到,局部多项式回归的结果更加平缓,极值点处的拟合效果更好.

    • R语言代码如下:
    par(mfrow=c(2,2))
    fit1 <- ksmooth(x=data$length,y=data$luminous,kernel='normal',bandwidth = 0.1,range.x = range(data$length),n.points = length(x))
    fit2 <- ksmooth(x=data$length,y=data$luminous,kernel='normal',bandwidth = 0.5,range.x = range(data$length),n.points = length(x))
    fit3 <- ksmooth(x=data$length,y=data$luminous,kernel='normal',bandwidth = 1.5,range.x = range(data$length),n.points = length(x))
    fit4 <- ksmooth(x=data$length,y=data$luminous,kernel='normal',bandwidth = 3.0,range.x = range(data$length),n.points = length(x))
    
    polyfit <- locpoly(x1,x2,bandwidth = 0.1)
    plot(x1,x2,xlab = 'length' ,ylab = 'luminous' ,main='bandwidth=0.1')
    lines(polyfit,lwd=2.0,col='blue')
    lines(fit1,lwd=2.0,col='red')
    
    polyfit <- locpoly(x1,x2,bandwidth = 0.5)
    plot(x1,x2,xlab = 'length' ,ylab = 'luminous' ,main='bandwidth=0.5')
    lines(polyfit,lwd=2.0,col='blue')
    lines(fit2,lwd=2.0,col='red')
    
    
    polyfit <- locpoly(x1,x2,bandwidth = 1.5)
    plot(x1,x2,xlab = 'length' ,ylab = 'luminous' ,main='bandwidth=1.5')
    lines(polyfit,lwd=2.0,col='blue')
    lines(fit3,lwd=2.0,col='red')
    
    
    polyfit <- locpoly(x1,x2,bandwidth = 3.0)
    plot(x1,x2,xlab = 'length' ,ylab = 'luminous' ,main='bandwidth=3.0')
    lines(polyfit,lwd=2.0,col='blue')
    lines(fit4,lwd=2.0,col='red')
    
    展开全文
  • 核平滑方法——局部多项式回归

    千次阅读 2020-05-31 14:31:25
    1. 核平滑方法 代码实现 2. 局部多项式回归 2.1 加权最小二乘法(Weighted least squares) 2.2 局部多项式回归(Local polynomial kernel regression) 代码实现

    \qquad 本文以一维核平滑为例,假设有观测数据集 { x i , y i } i = 0 N   , x i , y i ∈ R \{x_i,y_i\}_{i=0}^N\ ,x_i,y_i\in R {xi,yi}i=0N ,xi,yiR,目标是为了找到一个回归函数 y = f ( x ) y=f(x) y=f(x) 来拟合观测数据。
    \qquad

    1. 核平滑方法

    \qquad 核平滑 (Kernel Smoothing) \text{(Kernel\ Smoothing)} (Kernel Smoothing)的基本思想:
    ( 1 ) \qquad(1) (1) 只使用与目标点 x i x_i xi 邻近位置 x ∈ N i = { x   ∣   ∣ ∣ x − x i ∣ ∣ < δ } x\in\mathcal N_i=\{x\ \big|\ ||x-x_i||<\delta\} xNi={x  xxi<δ} 的一些观测点来进行拟合
    ( 2 ) \qquad(2) (2) 这种局部化是通过核函数 (kernel function) \text{(kernel\ function)} (kernel function) 来刻画
    \qquad\qquad 离目标点 x i x_i xi 越近的观测点对 x i x_i xi 的估计影响更大、具有更大的权值
    \qquad\qquad 离目标点 x i x_i xi 越远的观测点对 x i x_i xi 的估计影响更小、具有更小的权值

    \qquad 例如,图 1 1 1 中的高斯核函数(其中 h h h 为标准差,控制邻域宽度)

    K ( x , x i ) = K ( ∥ x − x i ∥ ) = e − ( x − x i ) 2 2 h 2 ,   ∀   x ∈ N i \qquad\qquad K(x,x_i)=K(\parallel x-x_i\parallel)=e^{-\frac{(x-x_i)^2}{2h^2}},\ \forall\ x\in\mathcal N_i K(x,xi)=K(xxi)=e2h2(xxi)2,  xNi

    \qquad 在这里插入图片描述

    图1 对于目标点为 ( x i , y i ) (x_i,y_i) (xi,yi) 处的黑色实心点 x x x 轴上的红色实心点表示与 x i x_i xi 相邻的位置 x ∈ N i x\in\mathcal N_i xNi红色空心点 x x x 轴上红色实心点对应的高斯权值
    另外,图中还画出了一部分代表观测数据的黑色空心点处的高斯权值曲线

    \qquad 核平滑,也就是局部加权平均,核回归函数为:

    y = f ( x ) = ∑ i = 0 N y i K ( x , x i ) ∑ i = 0 N K ( x , x i ) \qquad\qquad y=f(x)=\dfrac{\sum\limits_{i=0}^Ny_iK(x,x_i)}{\sum\limits_{i=0}^NK(x,x_i)} y=f(x)=i=0NK(x,xi)i=0NyiK(x,xi)

    \qquad 在这里插入图片描述

    图2 常见的三种核函数:Epanechnikov和Tri-cube是紧支的,而Gaussian是非紧支的。
    图片取自于《The Elements of Statistical Learning - Data Mining, Inference, and Prediction》Fig 6.2

    Epanechnikov \qquad \text{Epanechnikov} Epanechnikov 二次核:

    K ( x , x i ) = D ( ∥ x − x i ∥ h ) \qquad\qquad K(x,x_i)=D\left(\dfrac{\parallel x-x_i\parallel}{h}\right) K(x,xi)=D(hxxi),其中 h h h 确定 x i x_i xi 的邻域宽度。

    D ( t ) = { 3 4 ( 1 − t 2 ) , ∣ t ∣ < 1 0 , 其 他 \qquad\qquad D(t)=\left\{\begin{matrix}\frac{3}{4}(1-t^2)&\qquad,|t|<1\\ \\ 0 &\qquad,其他 \end{matrix}\right. D(t)=43(1t2)0,t<1,

    Tri-cube \qquad \text{Tri-cube} Tri-cube 核:

    D ( t ) = { ( 1 − ∣ t ∣ 3 ) 3 , ∣ t ∣ < 1 0 , 其 他 \qquad\qquad D(t)=\left\{\begin{matrix}(1-|t|^3)^3 & \qquad ,|t|<1\\ \\ 0 &\qquad,其他 \end{matrix}\right. D(t)=(1t3)30,t<1,

    \qquad 显然, h h h 值越小,相同情况下的 t = ∥ x − x i ∥ h t=\dfrac{\parallel x-x_i\parallel}{h} t=hxxi 越大,对于紧支撑的核函数 D ( t ) D(t) D(t) 而言,用于实现局部加权平均的局部观测数据就越少。
    \qquad 反之, h h h 值越大,相同情况下的 t = ∥ x − x i ∥ h t=\dfrac{\parallel x-x_i\parallel}{h} t=hxxi 越小,参与局部加权平均的局部观测数据就越多。
    \qquad

    代码实现

    import numpy as np
    import matplotlib.pyplot as plt
    
    def kernel_regression(x, h, h0):
        weight_e = lambda t:  (1-t**2)*3/4 
        weight_t = lambda t:  (1-t**3)**3 
        y = np.sin(4*x)
        y_noise = y + np.random.randn(len(x))/3
    
        num = len(x)
        y_rec_e = np.zeros(num)
        y_rec_t = np.zeros(num)
        y_rec_g = np.zeros(num)
        for i in range(num):
            dist = np.abs(x-x[i])/h  
            # epanechnikov
            w_e = weight_e(dist)*np.where(dist<=1,1,0)              
            y_rec_e[i] = np.sum(y_noise*w_e)/np.sum(w_e)
            # tri-cube
            w_t = weight_t(dist)*np.where(dist<=1,1,0) 
            y_rec_t[i] = np.sum(y_noise*w_t)/np.sum(w_t)
        
        # gaussian kernel    
        gaussian_kernel = lambda d,h: np.exp(-dist**2/(2*(h**2)))/(np.sqrt(2*np.pi)*h)
        for i in range(num):
            dist = np.abs(x-x[i])
            w = gaussian_kernel(dist,h0)
            y_rec_g[i] = np.sum(y_noise*w)/np.sum(w)        
        return y_rec_g, y_rec_e, y_rec_t, y_noise, y
    
    if __name__ == '__main__':    
        plt.figure
        snum = 100
        h = 0.3
        h0 = 0.1
        x = np.linspace(0,1,snum)
        y_rec_g, y_rec_e, y_rec_t, y_noise, y = kernel_regression(x,h,h0)
        plt.plot(x,y)
        plt.plot(x,y_noise,'yo',markerfacecolor='none')
        plt.plot(x,y_rec_e,'k')
        plt.plot(x,y_rec_t,'r')
        plt.plot(x,y_rec_g,'m')    
        plt.legend(labels=['original data','noise data','epanechnikov','tri-cube','gaussian'],loc='upper right')
        plt.title('kernel regression:y=sin(4x),h=0.3') 
        plt.show()
    

    运行结果
    \qquad 在这里插入图片描述
    \qquad 在这里插入图片描述
    \qquad 在这里插入图片描述

    数据集不同时, h h h 的值也要进行相应调整。

    \qquad

    2. 局部多项式核回归

    \qquad 由于核函数在边界区域上无法满足对称性(例如,图 1 1 1中左侧边界点 x = − 4 x=-4 x=4 处只有右侧邻域中的观测点可以用,右侧边界点 x = 4 x=4 x=4 处只有左侧邻域中的观测点可以用),局部加权平均在边界处会出现较大的误差(如上图所示),局部多项式回归可以缓解这一问题。

    2.1 加权最小二乘法(Weighted least squares)

    \qquad 如下图所示,已知观测样本集 { x i , y i } i = 0 N \{\boldsymbol x_{i},y_{i}\}_{i=0}^{N} {xi,yi}i=0N,采用线性模型:

    \qquad\qquad φ ( x ) = ∑ n = 0 M a n φ n ( x ) = a 0 φ 0 ( x ) + a 1 φ 1 ( x ) + ⋯ + a M φ M ( x ) = θ T ϕ ( x ) = ϕ T ( x ) θ \begin{aligned}\varphi(\boldsymbol x)&=\sum\limits_{n=0}^{M}a_{n}\varphi_{n}(\boldsymbol x)=a_{0}\varphi_{0}(\boldsymbol x)+a_{1}\varphi_{1}(\boldsymbol x)+\cdots+a_{M}\varphi_{M}(\boldsymbol x)\\ &=\boldsymbol \theta^T\boldsymbol\phi(\boldsymbol x)=\boldsymbol\phi^T(\boldsymbol x)\boldsymbol \theta \end{aligned} φ(x)=n=0Manφn(x)=a0φ0(x)+a1φ1(x)++aMφM(x)=θTϕ(x)=ϕT(x)θ

    \qquad 其中, θ = [ a 0 , a 1 , ⋯   , a M ] T \boldsymbol\theta=[a_0,a_1,\cdots,a_M]^T θ=[a0,a1,,aM]T ϕ ( x ) = [ φ 0 ( x ) , φ 1 ( x ) , ⋯   , φ M ( x ) ] T \boldsymbol\phi(\boldsymbol x)=[\varphi_0(\boldsymbol x),\varphi_1(\boldsymbol x),\cdots,\varphi_M(\boldsymbol x)]^T ϕ(x)=[φ0(x),φ1(x),,φM(x)]T

    \qquad 在这里插入图片描述
    \qquad 上图中,线性模型关于每个观测点 ( x i , y i ) (\boldsymbol x_{i},y_{i}) (xi,yi) ℓ 2 \ell_{2} 2 损失(平方误差)为: [ φ ( x i ) − y i ] 2 [\varphi(\boldsymbol x_i)-y_i]^2 [φ(xi)yi]2

    \qquad 假设每个观测点的对误差的影响各不相同,因此,引入加权系数 { w i } i = 0 N \{w_i\}_{i=0}^{N} {wi}i=0N,将“整个数据集的总误差”设为加权损失函数 (weighted loss function) \text{(weighted\ loss\ function)} (weighted loss function),也就是:

    \qquad\qquad J ( θ ) = w 0 [ φ ( x 0 ) − y 0 ] 2 + w 1 [ φ ( x 1 ) − y 1 ] 2 + ⋯ + w N [ φ ( x N ) − y N ] 2 = ∑ i = 0 N w i [ φ ( x i ) − y i ] 2 = ∑ i = 0 N w i [ θ T ϕ ( x i ) − y i ] 2 = ( Φ θ − y ) T W ( Φ θ − y ) \begin{aligned}J(\boldsymbol\theta)&=w_0[\varphi(\boldsymbol x_0)-y_0]^2+w_1[\varphi(\boldsymbol x_1)-y_1]^2+\cdots+w_N[\varphi(\boldsymbol x_N)-y_N]^2\\ &=\displaystyle\sum_{i=0}^{N}w_i[\varphi(\boldsymbol x_i)-y_i]^2\\ &=\displaystyle\sum_{i=0}^{N}w_i[\boldsymbol \theta^T\boldsymbol\phi(\boldsymbol x_i)-y_i]^2\\ &= (\Phi\boldsymbol\theta-\boldsymbol y)^TW(\Phi\boldsymbol\theta-\boldsymbol y) \\ \end{aligned} J(θ)=w0[φ(x0)y0]2+w1[φ(x1)y1]2++wN[φ(xN)yN]2=i=0Nwi[φ(xi)yi]2=i=0Nwi[θTϕ(xi)yi]2=(Φθy)TW(Φθy)

    \qquad 其中, y = [ y 0 , y 1 , ⋯   , y N ] T \boldsymbol y=[y_0,y_1,\cdots,y_N]^T y=[y0,y1,,yN]T

    \qquad     W = [ w 0 w 1 ⋱ w N ] W=\left[\begin{matrix}w_0& & & \\ &w_1 & & \\ & &\ddots & \\ & & &w_N \end{matrix}\right] W=w0w1wN

    \qquad     Φ = [ ϕ ( x 0 ) T ϕ ( x 1 ) T ⋮ ϕ ( x N ) T ] = [ φ 0 ( x 0 ) φ 1 ( x 0 ) ⋯ φ M ( x 0 ) φ 0 ( x 1 ) φ 1 ( x 1 ) ⋯ φ M ( x 1 ) ⋮ ⋮   ⋮ φ 0 ( x N ) φ 1 ( x N ) ⋯ φ M ( x N ) ] \Phi=\left[\begin{matrix}\boldsymbol\phi(\boldsymbol x_0)^T\\ \boldsymbol\phi(\boldsymbol x_1)^T\\ \vdots\\ \boldsymbol\phi(\boldsymbol x_N)^T \end{matrix}\right]=\left[\begin{matrix}\varphi_0(\boldsymbol x_0)&\varphi_1(\boldsymbol x_0)&\cdots&\varphi_M(\boldsymbol x_0)\\ \varphi_0(\boldsymbol x_1)&\varphi_1(\boldsymbol x_1)&\cdots&\varphi_M(\boldsymbol x_1)\\ \vdots&\vdots&\ &\vdots \\ \varphi_0(\boldsymbol x_N)&\varphi_1(\boldsymbol x_N)&\cdots&\varphi_M(\boldsymbol x_N)\end{matrix}\right] Φ=ϕ(x0)Tϕ(x1)Tϕ(xN)T=φ0(x0)φ0(x1)φ0(xN)φ1(x0)φ1(x1)φ1(xN) φM(x0)φM(x1)φM(xN)
    \qquad
    \qquad 损失函数 J ( θ ) J(\boldsymbol\theta) J(θ) 对系数 θ \boldsymbol\theta θ 求偏导:

    \qquad\qquad ∂ J ( θ ) ∂ θ = 2 Φ T W Φ θ − 2 Φ T W y = 0 \begin{aligned}\dfrac{\partial J(\boldsymbol\theta)}{\partial \boldsymbol\theta}&=2\Phi^TW\Phi\theta-2\Phi^TW\boldsymbol y=0 \end{aligned} θJ(θ)=2ΦTWΦθ2ΦTWy=0

    \qquad 可求得:

    \qquad\qquad θ = ( Φ T W Φ ) − 1 Φ T W y \boldsymbol\theta=(\Phi^TW\Phi)^{-1}\Phi^TW\boldsymbol y θ=(ΦTWΦ)1ΦTWy
    \qquad
    \qquad 关于本节内容更详细的解释,请参考函数的最佳逼近问题:最小二乘法
    \qquad

    2.2 局部多项式核回归(Local polynomial kernel regression)

    \qquad 局部加权回归,是在每个目标点 x i x_i xi 单独求一个加权最小二乘解。

    \qquad 若最小二乘逼近采用多项式模型

    \qquad\qquad φ ( x ) = ∑ n = 0 M a n φ n ( x ) = a 0 φ 0 ( x ) + a 1 φ 1 ( x ) + ⋯ + a M φ M ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a M x M = ∑ n = 0 M a n x n \begin{aligned}\varphi(x)&=\sum\limits_{n=0}^{M}a_{n}\varphi_{n}(x)=a_{0}\varphi_{0}(x)+a_{1}\varphi_{1}(x)+\cdots+a_{M}\varphi_{M}(x)\\ &=a_0+a_1x+a_2x^2+\cdots+a_Mx^M\\ &=\sum\limits_{n=0}^{M}a_{n}x^n \end{aligned} φ(x)=n=0Manφn(x)=a0φ0(x)+a1φ1(x)++aMφM(x)=a0+a1x+a2x2++aMxM=n=0Manxn

    \qquad\qquad 也就是: φ 0 ( x ) = 1 \varphi_{0}(x)=1 φ0(x)=1 φ n ( x ) = x n ,   n = 1 ∼ M \varphi_{n}(x)=x^n,\ n=1\sim M φn(x)=xn, n=1M

    \qquad 特别地,当 M = 1 M=1 M=1 时,多项式模型就变成了线性回归模型
    \qquad     当 M = 2 M=2 M=2 时,多项式模型就变成了抛物线回归模型

    \qquad 因此,局部加权回归可以描述为:
    ( 1 ) \qquad(1) (1) 采用 M M M多项式模型来求加权最小二乘解
    ( 2 ) \qquad(2) (2) 采用高斯核函数 K ( x , x i ) = K ( ∥ x − x i ∥ ) K(x,x_i)=K(\parallel x-x_i\parallel) K(x,xi)=K(xxi) 来刻画目标点 x i x_i xi 的邻域位置 x ∈ N i = { x   ∣   ∣ ∣ x − x i ∣ ∣ < δ } x\in \mathcal N_i=\{x\ \big|\ ||x-x_i||<\delta\} xNi={x  xxi<δ} 处观测数据的权值,作为加权最小二乘解中的权值

    \qquad 也就是求每个观测点 x i x_i xi 的加权最小二乘解,此时的目标函数为:

    \qquad\qquad J i ( θ ) = ∑ x j ∈ N i K ( x i , x j ) [ y j − ∑ n = 0 M a n ( x i ) x j n ] 2 = ∑ x j ∈ N i K ( x i , x j ) [ y j − θ i T ϕ ( x j ) ] 2 \begin{aligned}J_i(\boldsymbol\theta)&=\displaystyle\sum_{x_j\in\mathcal N_i}K(x_i,x_j)\left[y_j-\sum\limits_{n=0}^{M}a_{n}(x_i)x_j^n\right]^2\\ &=\displaystyle\sum_{x_j\in\mathcal N_i}K(x_i,x_j)[y_j-\boldsymbol \theta_i^T\boldsymbol\phi(x_j)]^2 \end{aligned} Ji(θ)=xjNiK(xi,xj)[yjn=0Man(xi)xjn]2=xjNiK(xi,xj)[yjθiTϕ(xj)]2

    \qquad 其中, θ i = [ a 0 ( x i ) , a 1 ( x i ) , a 2 ( x i ) , ⋯   , a M ( x i ) ] T \boldsymbol\theta_i=[a_0(x_i),a_1(x_i),a_2(x_i),\cdots,a_M(x_i)]^T θi=[a0(xi),a1(xi),a2(xi),,aM(xi)]T ϕ ( x ) = [ 1 , x , x 2 , ⋯   , x M ] T \boldsymbol\phi(x)=[1,x,x^2,\cdots,x^M]^T ϕ(x)=[1,x,x2,,xM]T

    \qquad 因此,对观测点 x i x_i xi 的(关于局部数据集的)目标函数 J i ( θ ) J_i(\boldsymbol\theta) Ji(θ) 可求出在观测点 x i x_i xi 的加权最小二乘解 θ i \boldsymbol\theta_i θi,也就是用与观测点 x i x_i xi 邻近的局部观测数据来拟合局部曲线。

    \qquad 局部多项式核回归的示意图如图 3 3 3 所示:
    \qquad 在这里插入图片描述

    图3 在目标点为 ( x i , y i ) (x_i,y_i) (xi,yi) 处的局部多项式核回归示意图(假设蓝色曲线为“局部多项式核回归”的结果)
    (1)待求解的黑色实心点目标值 y i y_i yi 对应于 x x x 轴的位置为黑色空心点 x i x_i xi
    (2)在示意图中,使用了 x i x_i xi 位置的左边和右边的 4 4 4 个邻近位置的观测数据(红色实心点)作为“局部观测数据集” N i \mathcal N_i Ni,来求加权最小二乘解 f ~ ( x ) \tilde f(x) f~(x)
    (3)各个局部观测数据 x ∈ N i x\in\mathcal N_i xNi 的权值由高斯核函数求得,即图中的“+”号所表示的
    (4)将局部多项式核回归的解 f ~ ( x i ) \tilde f(x_i) f~(xi) 作为黑色空心点位置 x i x_i xi 的目标值,即 y i = f ~ ( x i ) y_i=\tilde f(x_i) yi=f~(xi)

    代码实现

    import numpy as np
    import matplotlib.pyplot as plt
    
    def gen_data(x):
        y = x ** 2 + 30 * np.sin(x)
        y_noise = y + np.random.randn(len(x))*5
        return y, y_noise
        
    #基于多项式模型的加权最小二乘法
    def weighted_least_squares(y_noise,x,M,W):    
        design_matrix = np.asmatrix(np.ones(len(x))).T
        for i in range(1,M+1):
            arr = np.asmatrix(np.power(x,i)).T
            design_matrix  = np.concatenate((design_matrix ,arr),axis=1)    
        coef = (design_matrix.T*W*design_matrix).I*(design_matrix.T*W*(np.asmatrix(y_noise).T))    
        return np.asarray(coef)
    
    def local_polynomial_kernel_regression(y_noise,x,M,width,sigma):
        kernel = lambda x,c,sig: np.exp(-(x-x[c])**2/(2*(sig**2)))/(np.sqrt(2*np.pi)*sig)
        for i in range(len(x)):
            local_y = y_noise[max(0,i-width):min(len(x),i+width)] 
            local_x = x[max(0,i-width):min(len(x),i+width)]
            weight = kernel(x,i,sigma)#计算邻域各位置的权值
            local_weight = weight[max(0,i-width):min(len(x),i+width)]
            W = np.diag(local_weight)
            coef = weighted_least_squares(local_y,local_x,M,W)
            if M==1:#局部线性回归
                y[i] = coef[1]*x[i] + coef[0]
            if M==2:#局部二阶多项式回归
                y[i] = coef[2]*x[i]*x[i] + coef[1]*x[i] + coef[0]        
        return y    
    
    if __name__ == '__main__':    
        plt.figure
        x = np.linspace(-8, 6, 200)
        y, y_noise = gen_data(x)
        plt.plot(x,y,'b')
        plt.plot(x,y_noise,'yx')
        y_rec = local_polynomial_kernel_regression(y_noise,x,1,20,0.8)#M=1线性
        plt.plot(x,y_rec,'r')
        y_rec = local_polynomial_kernel_regression(y_noise,x,2,20,0.8)#M=2二阶多项式
        plt.plot(x,y_rec,'k')
        plt.legend(labels=['original data','noise data','local linear','local polynomial'],loc='upper right')
        plt.title('local polynomial kernel regression')
        plt.show()
    

    运行结果:
    \qquad 在这里插入图片描述
    \qquad 从上图中可以看出,与第1节核平滑方法中的“局部加权平均”的核回归方法相比,局部多项式回归在左右边界点处的拟合明显更好。

    展开全文
  • 一元非线性回归-多项式函数拟合

    千次阅读 2016-05-11 20:50:24
    推导过程:  1. 设拟合多项式为:    2. 各点到这条曲线的距离之和,即偏差平方和如下:    3. 为了求得符合条件的a值,对等式右边求ai偏导数,因而我们得到了:
  • 函数 fLOESS 对一维数据执行 LOESS(使用二阶多项式局部加权非参数回归拟合)平滑,无需 Matlab 曲线拟合工具箱。 这可能被认为是 LOWESS 的一种稍微更好的方法,它使用线性拟合产生局部加权回归。
  • 凌云时刻 · 技术导读:在前面的笔记中,我们使用的样本数据都是具有一定线性关系的,我们使用简单线性回归或者多元线性回归拟合这些数据。但是这种具有强假设的数据集在实际应用中是比较少的,大...
  • #非线性回归模型 setwd("I:/研一课程/2.2回归分析/R/data")#设定当前的工作目录,重要! a ...#多项式回归 setwd("I:/研一课程/2.2回归分析/R/data")#设定当前的工作目录,重要! a income.plm
  • 多项式回归 扩展可能是假设某些多项式函数, 同样,在标准线性模型方法(使用GLM的条件正态分布)中,参数可以使用最小二乘法获得,其中在。 即使此多项式模型不是真正的多项式模型,也可能仍然是一个很好的...
  • from math import ceil import numpy as np ...当多项式拟合次数过高时,新的应变量会在除了原自变量点之外的区间发生振荡,所以在应用拟合得到的该多项式时,新的自变量不能落在这些区间, 但若落在任意原自
  • 本文主要研究非参数异方差回归模型的局部多项式估计问题....最后,通过对农村居民消费与收入的实证研究,说明了非参数异方差回归模型的局部多项式方法比普通最小二乘估计法的拟合效果更好,并且预测的精度更高.
  • 全局多项式插值法可以根据整个表面拟合多项式,而局部多项式插值法可以对位于指定重叠邻域内的多个多项式进行拟合。通过使用大小和形状、邻域数量和部分配置,可以对搜索邻域进行定义。.或者,可以使用探索性趋势面...
  • 此时只能使用多项式回归拟合曲线。比如如下数据,使用线性函数来拟合就明显不合适了。 接下来要做的就是升维,上面的真实函数是:$ y = 0.5x^2 + 2x + 5。而样本数据的形式是(x,y),以这种方式只能训练出。而...
  • STATA分数多项式回归

    2021-06-16 20:13:40
    分数多项式模型应用:当怀疑连续性自变量与因变量的某些或全部关系可能是非线性的时。反拟合算法,比需要取节点的限制性li'fang'yang'tia
  • 总览 在这里,我们放宽了流行的线性技术的线性假设。有时线性假设只是一个很差的近似值。有许多方法可以解决此问题,其中一些方法可以通过使用正则化... 多项式回归 这是对数据提供非线性拟合的简单方法。 阶...
  • 在一元线性回归中,输入特征只有一维, hθ=θ0+x1θ1h_{θ}=θ_0 + x_1θ_1, 对于多元特征,假设...对于非线性的一维数据,用线性回归拟合结果并不好,可以采用多项式回归,手动增加特征,例如如下4种多项式拟合 hθ
  • 多项式回归法估计一个因变量与一个自变量之间的多项式关系
  • 多项式回归的matlab实现

    千次阅读 2018-09-07 14:37:10
    一次函数的线性回归 首先我们回顾一下当回归函数为一次函数的情况 存在训练样本矩阵 X ,该矩阵大小为m*n ,其中m为样本数量,n为特征数量 此时回归方程为   其中为系数向量 此时代价函数为  ...
  • =================================================================== 全局多项式插值法可以根据整个表面拟合多项式,而局部多项式插值法可以对位于指定重叠邻域内的多个多项式进行拟合。通过使用大小和形状、邻域...
  • 作者:SETHNEHA翻译:王可汗校对:陈丹本文约3200字,建议阅读15分钟本文为大家介绍多项式回归中的梯度下降算法。关键词:梯度下降、多项式回归、模型优化梯度下降是一个需要理解的重要...
  • % POLYFITCON - 带有可选附加约束的多项式拟合。 % 约束点可以限制为局部极值。 % [pfunc,pval]=polyfitcon(x,y,n,xc,yc,p0,isLocExt) 返回%pfunc,存储用于拟合的阶数'n'的多项式。 % pval,拟合多项式的权重。 %...
  • 前言: 以下内容是个人学习之后的感悟,转载请注明出处~ 总结: 回归属于监督学习的一种的方法,从连续的数据中得到模型,...但用线性回归的话,就可以很好的进行拟合,如果用多项式回归的话,那么拟合度会很差. 画一...
  • matlab多项式拟合以及指定函数拟合

    千次阅读 2015-03-10 12:05:00
    %% 多项式拟合指令;% X = [1 2 3 4 5 6 7 8 9 ];% Y = [9 7 6 3 -1 2 5 7 20]; % P= polyfit (X,Y,3);% % x = 0:2:10;% y = polyval(P,x);% plot(x,y,X,Y,'r*');%% 指定函数拟合 x=[ 0;0.4;1.2; 2;2.8;3....
  • 二、多项式回归 1.多项式回归模型 2.训练多项式回归模型 3.学习曲线 4.偏差/方差权衡 一、线性回归 1.线性模型 概括地说, 线性模型 就是对输入特征加权求和,再加上一个偏置项(也称为截距项)的常数,以此...
  • 目录6.0 导言6.1 一维核光滑器6.1.1 局部线性回归6.1.2 局部多项式回归6.2 选择核宽度6.3 Rp\mathbb R^pRp中的局部回归 6.0 导言 P192 本章的方法都是memory-based,很少或不需要训练。模型就是整个训练集(PRML中...
  • 在讲解局部加权线性回归之前,先讲解两个概念:欠拟合、过拟合,由此引出局部加权线性回归算法。   欠拟合、过拟合  如下图中三个拟合模型。第一个是一个线性模型,对训练数据拟合不够好,损失函数取值较大。如...
  • 在解说局部加权线性回归之前,先解说两个概念:欠拟合、过拟合。由此引出局部加权线性回归算法。 欠拟合、过拟合 例如以下图中三个拟合模型。第一个是一个线性模型。对训练数据拟合不够好,损失函数取值...
  • R语言与函数估计学习笔记(核方法与局部多项式

    万次阅读 多人点赞 2014-05-17 11:31:44
    用于函数估计的非参数方法大致上有三种:核方法、局部多项式方法、样条方法。 非参的函数估计的优点在于稳健,对模型没有什么特定的假设,只是认为函数光滑,避免了模型选择带来的风险;但是,表达式复杂,难以解释...
  • 1.线性回归参数求解一般的线性模型,等式如下所示:ŷ是预测值。n是特征的数量。xi是第i个特征值。θj是第j个模型参数(包括偏置项θ0和特征权重θ1,θ2,...,θn)。这可以使用向量的形式写得更简洁:θ是模型的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,845
精华内容 1,938
关键字:

局部多项式回归拟合