精华内容
下载资源
问答
  • http://blog.csdn.net/carson2005/article/details/7243425     http://www.cnblogs.com/yyrdl/p/5059277.html 直线的光栅画法 http://www.cnblogs.com/zichi/p/5059161.html 图片预加载

    http://blog.csdn.net/carson2005/article/details/7243425

     

     

    http://www.cnblogs.com/yyrdl/p/5059277.html 直线的光栅画法

    http://www.cnblogs.com/zichi/p/5059161.html 图片预加载

    展开全文
  • 非参数与半参数统计之核函数

    千次阅读 2019-04-06 19:20:17
    非参数与半参数统计之核函数核函数的本质是什么核函数的产生过程常见的核函数 核函数的本质是什么 核函数的产生过程 众所周知,分布函数的导数是密度函数,即: f(x)=F′(x)=lim⁡h→0F(x+h)−F(x−h)2hf(x)=F&#...

    核函数的本质是什么

    核函数的产生过程

    众所周知,分布函数的导数是密度函数,即:
    f ( x ) = F ′ ( x ) = lim ⁡ h → 0 F ( x + h ) − F ( x − h ) 2 h f(x)=F'(x)=\lim_{h\rightarrow0}\frac{F(x+h)-F(x-h)}{2h} f(x)=F(x)=limh02hF(x+h)F(xh)
    由于分布函数是未知的,所以用经验分布函数来近似代替分布函数,何为经验分布函数呢?下面给出其定义
    定义: F n ( x ) = 1 n ∑ i = 1 n I ( X i ≤ x ) F_n(x)=\frac{1}{n}\sum_{i=1}^{n}I(X_{i}\leq x ) Fn(x)=n1i=1nI(Xix)
    那么经验分布函数为何可以近似替代分布函数呢?
    分布函数 F ( X ) = P ( X ≤ x ) F(X)=P(X\leq x) F(X)=P(Xx),所以通俗的理解就是经验分布函数是用频率来近似表示概率以此来近似替代分布函数。
    于是: f n ( x ) = lim ⁡ h → 0 F n ( x + h ) − F n ( x − h ) 2 h f_n(x)=\lim_{h\rightarrow0}\frac{F_n(x+h)-F_n(x-h)}{2h} fn(x)=limh02hFn(x+h)Fn(xh)
    根据经验分布函数的定义有
    F n ( x + h ) = 1 n ∑ i = 1 n I ( X i ≤ x + h ) F_n(x+h)=\frac{1}{n}\sum_{i=1}^{n}I(X_{i}\leq x+h ) Fn(x+h)=n1i=1nI(Xix+h)
    F n ( x − h ) = 1 n ∑ i = 1 n I ( X i ≤ x − h ) F_n(x-h)=\frac{1}{n}\sum_{i=1}^{n}I(X_{i}\leq x-h ) Fn(xh)=n1i=1nI(Xixh)
    所以有
    F n ( x + h ) − F n ( x − h ) = 1 n ∑ i = 1 n I ( − 1 ≤ x i − X h ≤ 1 ) F_n(x+h)-F_n(x-h)=\frac{1}{n}\sum_{i=1}^{n}I(-1\leq \frac{x_{i}-X}{h}\leq 1 ) Fn(x+h)Fn(xh)=n1i=1nI(1hxiX1)
    所以
    f n ( x ) = 1 n h ∑ i = 1 n I ( ∣ x i − X h ∣ ≤ 1 ) f_n(x)=\frac{1}{nh}\sum_{i=1}^{n}I(| \frac{x_{i}-X}{h}|\leq 1 ) fn(x)=nh1i=1nI(hxiX1)
    这里,我们先假设 k ( u ) = 1 2 I ( ∣ u ∣ ≤ 1 ) k(u)=\frac{1}{2}I(|u|\leq 1) k(u)=21I(u1),因此有
    k ( x i − X h ) = 1 2 I ( ∣ x i − X h ∣ ≤ 1 ) k(\frac{x_{i}-X}{h})=\frac{1}{2}I(| \frac{x_{i}-X}{h}|\leq 1 ) k(hxiX)=21I(hxiX1)
    于是, f n ( x ) f_n(x) fn(x)又可以进一步写成
    f n ( x ) = 1 n ∑ i = 1 n 1 h k ( x i − X h ) f_n(x)=\frac{1}{n}\sum_{i=1}^{n}\frac{1}{h}k(\frac{x_{i}-X}{h}) fn(x)=n1i=1nh1k(hxiX)
    在这里,我们将 k ( x i − X h ) k(\frac{x_{i}-X}{h}) k(hxiX)称为核函数。
    上述的核函数,我们将其称为均匀核函数,因为它只有2种结果,在示性函数的区间中为 1 2 \frac{1}{2} 21,否则就是0。
    这样做显然是不合适的,因为在实际的估计中,若 X i X_{i} Xi越接近 x x x,核函数应该得到一个较大的、趋近于1的值,若 X i X_{i} Xi距离 x x x相对较远,则核函数应该得到一个较小的、趋近于0的值。(这也是我们通常将核函数视为一个权重的原因)
    于是,天才的数学家、统计学家们便发明出了一系列这样的神奇的核函数,不妨来一起感受一下。
    常见的核函数及其表达式和图像详见下一小节 常见的核函数

    常见的核函数

    除上述提到的均匀核函数外,常用的核函数还有
    1.Triangle 核函数: k ( u ) = ( 1 − ∣ u ∣ ) I ( ∣ u ∣ ≤ 1 ) k(u)=(1-|u|)I(|u|\leq 1) k(u)=(1u)I(u1)
    2.Epanechnikov 核函数: k ( u ) = 3 4 ( 1 − u 2 ) I ( ∣ u ∣ ≤ 1 ) k(u)=\frac{3}{4}(1-u^2)I(|u|\leq 1) k(u)=43(1u2)I(u1)
    3.Quartic 核函数: k ( u ) = 15 16 ( 1 − u 2 ) 2 I ( ∣ u ∣ ≤ 1 ) k(u)=\frac{15}{16}(1-u^2)^2I(|u|\leq 1) k(u)=1615(1u2)2I(u1)
    4.Triweight 核函数: k ( u ) = 35 32 ( 1 − u 2 ) 3 I ( ∣ u ∣ ≤ 1 ) k(u)=\frac{35}{32}(1-u^2)^3I(|u|\leq 1) k(u)=3235(1u2)3I(u1)
    5.Gaussian 核函数: k ( u ) = 1 2 π e x p ( − 1 2 u 2 ) k(u)=\frac{1}{\sqrt{2\pi}}exp(-\frac{1}{2}u^2) k(u)=2π 1exp(21u2)
    6.Cosine 核函数: k ( u ) = π 4 c o s ( π u 2 ) I ( ∣ u ∣ ≤ 1 ) k(u)=\frac{\pi}{4}cos(\frac{\pi u}{2})I(|u|\leq 1) k(u)=4πcos(2πu)I(u1).

    其图像如下:
    在这里插入图片描述

    [1]: 孙志华,尹俊平等 非参数与半参数统计[M] 清华大学出版社.2016.

    展开全文
  • 非参数估计密度估计KDE

    千次阅读 2017-12-29 20:27:58
    标签: kde非参数估计核密度估计 2016-12-14 11:38 11562人阅读 评论(1) 收藏 举报  分类: 机器学习MachineLearning(37) Scikit-Learn(15)  版权声明:本文为博主皮皮...
     

    非参数估计:核密度估计KDE

    标签: kde非参数估计核密度估计
      11562人阅读  评论(1)  收藏  举报
      分类:
     

    http://blog.csdn.net/pipisorry/article/details/53635895

    核密度估计Kernel Density Estimation(KDE)概述

    密度估计的问题

    由给定样本集合求解随机变量的分布密度函数问题是概率统计学的基本问题之一。解决这一问题的方法包括参数估计和非参数估计。

    参数估计

    参数估计又可分为参数回归分析和参数判别分析。在参数回归分析中,人们假定数据分布符合某种特定的性态,如线性、可化线性或指数性态等,然后在目标函数族中寻找特定的解,即确定回归模型中的未知参数。在参数判别分析中,人们需要假定作为判别依据的、随机取值的数据样本在各个可能的类别中都服从特定的分布。经验和理论说明,参数模型的这种基本假定与实际的物理模型之间常常存在较大的差距,这些方法并非总能取得令人满意的结果。

    [参数估计:最大似然估计MLE][参数估计:文本分析的参数估计方法]

    非参数估计方法

    由于上述缺陷,Rosenblatt和Parzen提出了非参数估计方法,即核密度估计方法。由于核密度估计方法不利用有关数据分布的先验知识,对数据分布不附加任何假定,是一种从数据样本本身出发研究数据分布特征的方法,因而,在统计学理论和应用领域均受到高度的重视。

    核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,又名Parzen窗(Parzen window)。Ruppert和Cline基于数据集密度函数聚类算法提出修订的核密度估计方法。

    核密度估计在估计边界区域的时候会出现边界效应

    [https://zh. wikipedia.org/zh-hans/核密度估计]

    因此,一句话概括,核密度估计Kernel Density Estimation(KDE)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。

    在密度函数估计中有一种方法是被广泛应用的——直方图。如下图中的第一和第二幅图(名为Histogram和Histogram, bins shifted)。直方图的特点是简单易懂,但缺点在于以下三个方面:密度函数是不平滑的;密度函数受子区间(即每个直方体)宽度影响很大,同样的原始数据如果取不同的子区间范围,那么展示的结果可能是完全不同的。如下图中的前两个图,第二个图只是在第一个图的基础上,划分区间增加了0.75,但展现出的密度函数却看起来差异很大;直方图最多只能展示2维数据,如果维度更多则无法有效展示。


    核密度估计有多种内核,图3(Tophat Kernl Density)为不平滑内核,图4(Gaussian Kernel Density,bandwidth=0.75)为平滑内核。在很多情况下,平滑内核(如高斯核密度估计,Gaussian Kernel Density)使用场景较多。

    虽然采用不同的核函数都可以获得一致性的结论(整体趋势和密度分布规律性基本一致),但核密度函数也不是完美的。除了核算法的选择外,带宽(bandwidth)也会影响密度估计,过大或过小的带宽值都会影响估计结果。如上图中的最后三个图,名为Gaussian Kernel Density,bandwidth=0.75、Gaussian Kernel Density,bandwidth=0.25、Gaussian Kernel Density,bandwidth=0.55.

    核密度估计的应用场景

    股票、金融等风险预测:在单变量核密度估计的基础上,可以建立风险价值的预测模型。通过对核密度估计变异系数的加权处理,可以建立不同的风险价值的预测模型。

    密度估计中应用较多的算法是高斯混合模型以及基于近邻的核密度估计。高斯混合核密度估计模型更多会在聚类场景中应用。

    [核密度估计Kernel Density Estimation(KDE)]

    核密度分析可用于测量建筑密度、获取犯罪情况报告,以及发现对城镇或野生动物栖息地造成影响的道路或公共设施管线。可使用 population 字段根据要素的重要程度赋予某些要素比其他要素更大的权重,该字段还允许使用一个点表示多个观察对象。例如,一个地址可以表示一栋六单元的公寓,或者在确定总体犯罪率时可赋予某些罪行比其他罪行更大的权重。对于线要素,分车道高速公路可能比狭窄的土路产生更大的影响,高压线要比标准电线杆产生更大的影响。[ArcGIS中的介绍]

    热力图大家一定听说过,其实热力图就是核密度估计。

    总而言之,核密度就是用来估计密度的,如果你有一系列空间点数据,那么核密度估计往往是比较好的可视化方法

    皮皮blog



    核密度估计

    所谓核密度估计,就是采用平滑的峰值函数(“核”)来拟合观察到的数据点,从而对真实的概率分布曲线进行模拟。

    核密度估计(Kernel density estimation),是一种用于估计概率密度函数的非参数方法,为独立同分布F的n个样本点,设其概率密度函数为f,核密度估计为以下:


    K(.)为核函数(非负、积分为1,符合概率密度性质,并且均值为0)。有很多种核函数,uniform,triangular, biweight, triweight, Epanechnikov,normal等。

    h>0为一个平滑参数,称作带宽(bandwidth),也看到有人叫窗口。

    Kh(x) = 1/h K(x/h). 为缩放核函数(scaled Kernel)。

    核密度函数的原理比较简单,在我们知道某一事物的概率分布的情况下,如果某一个数在观察中出现了,我们可以认为这个数的概率密度很大,和这个数比较近的数的概率密度也会比较大,而那些离这个数远的数的概率密度会比较小。

    基于这种想法,针对观察中的第一个数,我们可以用K去拟合我们想象中的那个远小近大概率密度。对每一个观察数拟合出的多个概率密度分布函数,取平均。如果某些数是比较重要的,则可以取加权平均。需要说明的一点是,核密度的估计并不是找到真正的分布函数。

    Note: 核密度估计其实就是通过核函数(如高斯)将每个数据点的数据+带宽当作核函数的参数,得到N个核函数,再线性叠加就形成了核密度的估计函数,归一化后就是核密度概率密度函数了

    以下面3个数据点的一维数据集为例:5, 10, 15

    绘制成直方图是这样的:                                                   而使用KDE则是:

    KDE模型:核函数

    理论上,所有平滑的峰值函数均可作为KDE的核函数来使用,只要对归一化后的KDE而言(描绘在图上的是数据点出现的概率值),该函数曲线下方的面积和等于1即可。

    只有一个数据点时,单个波峰下方的面积为1,存在多个数据点时,所有波峰下方的面积之和为1。概而言之,函数曲线需囊括所有可能出现的数据值的情况。

    常用的核函数有:矩形、Epanechnikov曲线、高斯曲线等。

    单个数据点(只有一个数据时)所对应的这些核函数

    矩形

    Epanechnikov曲线

    高斯曲线

    [概率论:高斯/正态分布 ]

    可以看到,这些函数存在共同的特点:

    1. 在数据点处为波峰
    2. 曲线下方面积为1

    sklearn中实现的核函数有

    kde_kernels

    sklearn核函数形式

    • Gaussian kernel (kernel = 'gaussian')

      K(x; h) \propto \exp(- \frac{x^2}{2h^2} )

    • Tophat kernel (kernel = 'tophat')

      K(x; h) \propto 1 if x < h

    • Epanechnikov kernel (kernel = 'epanechnikov')

      K(x; h) \propto 1 - \frac{x^2}{h^2}

    • Exponential kernel (kernel = 'exponential')

      K(x; h) \propto \exp(-x/h)

    • Linear kernel (kernel = 'linear')

      K(x; h) \propto 1 - x/h if x < h

    • Cosine kernel (kernel = 'cosine')

      K(x; h) \propto \cos(\frac{\pi x}{2h}) if x < h

    [Kernel Density Estimation ]

    wekipedia上各种核函数的图形


    均匀核函数 k(x)=1/2,-1≤x≤1 加入带宽h后: kh(x)=1/(2h),-h≤x≤h

    三角核函数 k(x)=1-|x|,-1≤x≤1 加入带宽h后: kh(x)=(h-|x|)/h^2,-h≤x≤h

    伽马核函数 kxi(x)=[x^(α-1)exp{-xα/xi}]/[(xi/α)^α.Γ(α)]

    高斯核函数K(x,xc)=exp(-||x-xc||^2/(2*σ)^2)其中xc为核函数中心,σ为函数的宽度参数

    [https://zh.wikipedia.org/zh-hans/%E6%A0%B8%E5%AF%86%E5%BA%A6%E4%BC%B0%E8%AE%A1]

    不同内核的比较

    Epanechnikov 内核在均方误差意义下是最优的,效率损失也很小。

    由于高斯内核方便的数学性质,也经常使用 K(x)= ϕ(x),ϕ(x)为标准正态概率密度函数。

    对于多个数据点的KDE曲线

    由于相邻波峰之间会发生波形合成,因此最终所形成的曲线形状与选择的核函数关系并不密切。考虑到函数在波形合成计算上的易用性,一般使用高斯曲线(正态分布曲线)作为KDE的核函数。

    KDE算法:索引树

    lz发现sklearn算法实现中有一个参数是算法项,如algorithm='auto',想了一下是为了加速。

    KDE的概率密度函数公式得到后


    有了上述公式之后,只需遍历输出图像的每一个点,计算其核密度估计值即可。

    但是稍微想一下就发现这个程序太冗余了,如果有很多点(n很大),并且输出图像很大,那么每一个像素都需要进行n个累积的加法运算,并且大部分都是+0(因为一般来说,一个点附近的点不会很多,远远小于n,其余大部分点与这个像素的距离都大于r),这样就造成了冗余计算。

    解决方案当然也非常简单,就是建立一个索引,然后在计算某个像素的核密度估计值时利用索引搜索出附近的点,然后累积这些点的核函数即可。

    如Dotspatial自带了多种空间索引,有R树,R*树,KD树等;sklearn自带了kd tree, ball tree等等。

    如果只需找出附近的点,对索引要求不高,任意一个索引都能使用。

    [ 空间点云核密度估计算法的实现-以Dotspatial为基础GIS库]

    KDE带宽h

    如何选定核函数的“方差”呢?这其实是由带宽h来决定,不同的带宽下的核函数估计结果差异很大。

    除了核函数,另一个影响KDE的参数是带宽(h)。带宽反映了KDE曲线整体的平坦程度,也即观察到的数据点在KDE曲线形成过程中所占的比重。

    带宽越大,观察到的数据点在最终形成的曲线形状中所占比重越小,KDE整体曲线就越平坦;带宽越小,观察到的数据点在最终形成的曲线形状中所占比重越大,KDE整体曲线就越陡峭。

    还是以上面3个数据点的一维数据集为例,如果增加带宽,那么生成的KDE曲线就会变平坦:

    如果进一步增加带宽,那么KDE曲线在变平坦的同时,还会发生波形合成:

    相反,如果减少带宽,那么KDE曲线就会变得更加陡峭:

    从数学上来说,对于数据点Xi,如果带宽为h,那么在Xi处所形成的曲线函数为(其中K为核函数):

    在上面的函数中,K函数内部的h分母用于调整KDE曲线的宽幅,而K函数外部的h分母则用于保证曲线下方的面积符合KDE的规则(KDE曲线下方面积和为1)。

    带宽的选择

    带宽的选择很大程度上取决于主观判断:如果认为真实的概率分布曲线是比较平坦的,那么就选择较大的带宽;相反,如果认为真实的概率分布曲线是比较陡峭的,那么就选择较小的带宽。

    带宽计算好像也有相应的方法,如R语言中计算带宽时,默认采用”nrd0″方法。

    如何选择h?显然是选择可以使误差最小的。下面用平均积分平方误差(mean intergrated squared error)的大小来衡量h的优劣。

    在weak assumptions下,MISE (h) =AMISE(h) + o(1/(nh) + h4) ,其中AMISE为渐进的MISE。而AMISE有,

    其中,

    为了使MISE(h)最小,则转化为求极点问题,



    当核函数确定之后,h公式里的R、m、f''都可以确定下来,有(hAMISE ~ n−1/5),AMISE(h) = O(n−4/5)。

            如果带宽不是固定的,其变化取决于估计的位置(balloon  estimator)或样本点(逐点估计pointwise estimator),由此可以产产生一个非常强大的方法称为自适应或可变带宽核密度估计。

    [ 核密度估计(Kernel density estimation) ]
    在选择合适的核函数及带宽后,KDE可以模拟真实的概率分布曲线,并得到平滑而漂亮的结果。以近200个点的CPU使用率为例,使用KDE绘制的结果为:
    Screen Shot 2013-12-31 at 7.26.14 AM

    [一维数据可视化:核密度估计(Kernel Density Estimates)]

    皮皮blog



    核密度估计的实现

    Python中KDE的实现:sklearn

    [sklearn.neighbors.KernelDensity(bandwidth=1.0algorithm='auto'kernel='gaussian'metric='euclidean'atol=0,rtol=0breadth_first=Trueleaf_size=40metric_params=None)

    from sklearn.neighbors import kde
    import numpy as np
    
    X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
    kde = kde.KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X)
    print(kde.score_samples(X))
    print(np.exp(kde.score_samples(X)))
    [-0.41075698 -0.41075698 -0.41076071 -0.41075698 -0.41075698 -0.41076071]

    [ 0.66314807  0.66314807  0.6631456   0.66314807  0.66314807  0.6631456 ]

    score_samples(X)

    Evaluate the density model on the data.

    Parameters:

    X : array_like, shape (n_samples, n_features)

    kde.score_samples(X)返回的是点x对应概率的log值,要使用exp求指数还原。

    Note: 还原后的所有点的概率和范围是[0, 无穷大],只是说一维数据线下面的面积或者二维数据面下面的体积和为1。

    [Density Estimation]

    [sklearn.neighbors.KernelDensity]

    spark中KDE的实现

    MLlib中,仅仅支持以高斯核做核密度估计。

    [核密度估计]

    R中KDE的实现

    在R语言中,KDE的绘制是通过density()函数来实现的 — 通过density()函数计算得到KDE模型,然后再使用plot()函数对KDE曲线进行绘制:
    x <- c(5, 10, 15)
    plot(density(x))
    出于兼容性上的考虑,R语言中density()函数在计算带宽时,默认采用”nrd0″方法。不过,根据R语言的帮助文档,带宽参数bw应该显式声明为其它更合适的方法,比如”SJ”:
    plot(density(x, bw="SJ"))
    对于调整带宽,除了修改bw参数,还可以通过设定adjust参数来进行扩大或缩小:
    plot(density(x, bw="SJ", adjust=1.5))
    在上面的例子中,最终使用的带宽将是采用”SJ”方法计算得到的带宽的1.5倍。adjust参数的默认值为1,也即既不扩大、也不缩小。
    至于核函数,density()默认采用高斯曲线。可以通过设定kernel参数来更改核函数。比如:plot(density(x, bw="SJ", kernel="epanechnikov"))

    density()函数接受以下7个核函数选项:
        gaussian。高斯曲线,默认选项。在数据点处模拟正态分布。
        epanechnikov。Epanechnikov曲线。
        rectangular。矩形核函数。
        triangular。三角形核函数。
        biweight。
        cosine。余弦曲线。
        optcosine。

    皮皮blog

    from: http://blog.csdn.net/pipisorry/article/details/53635895

    ref: [有边界区间上的核密度估计]

    展开全文
  • 概率密度函数非参数估计matlab代码matLearn matLearn:Matlab中的机器学习算法实现 免责声明: 该软件包是2014年秋季我们在机器学习课程中集体努力的结果,CPSC 540由UBC的Mark Schmid博士教授。 那时,还没有任何...
  • kde核密度估计,非参数估计的一种,使用高斯核函数进行概率密度估计,应用于独立成分分析确定控制限等过程
  • 以山东省小麦为研究对象,在通过非参数核密度估计测算小麦产量及价格双重风险的基础上,运用Copula函数与蒙特卡罗模拟相结合的方法进行小麦收入保险费率厘定。研究表明:非参数核密度估计避免了参数分布选择的主观性...
  • 密度估计非参数回归

    千次阅读 2020-12-14 09:06:45
    你可能听说过密度估计(KDE:kernel density estimation)或非参数回归(non-parametric regression)。你甚至可能在不知不觉的情况下使用它。比如在Python中使用seaborn或plotly时,distplot就是这样,在默认情况下...

    你可能听说过核密度估计(KDE:kernel density estimation)或非参数回归(non-parametric regression)。你甚至可能在不知不觉的情况下使用它。比如在Python中使用seaborn或plotly时,distplot就是这样,在默认情况下都会使用核密度估计器。但是这些大概是什么意思呢?

    也许你处理了一个回归问题,却发现线性回归不能很好地工作,因为特性和标签之间的依赖似乎是非线性的。在这里,核回归(kernel regression)可能是一种解决方案。

    在这篇文章中,我们通过示例,并试图对内核估计背后的理论有一个直观的理解。此外,我们还看到了这些概念在Python中的实现。

    核回归

    图1:全球谷歌搜索“chocolate”;x轴:时间,y轴:搜索百分比

    让我们从一个例子开始。假设你是一个数据科学家,在一家糖果工厂的巧克力部门工作。

    你可能想要预测巧克力的需求基于它的历史需求,作为第一步,想要分析趋势。2004-2020年的巧克力需求可能类似于图1中的数据。

    显然,这是有季节性的,冬天的需求会增加,但是由于你对趋势感兴趣,你决定摆脱这些波动。为此,你可以计算窗口为b个月的移动平均线,也就是说,对于每一个时刻t,你计算从t-b到t+b的时间段内需求的平均值。

    更正式地说,如果我们有一段时间内观察到的数据X(1),…,X(n),即一个时间序列,窗口为b的移动平均值可以定义为

    从下图(图2)中可以看出,移动平均值是原始数据的平滑版本,平滑程度取决于带宽。带宽越大,函数越平滑。

    图2:窗口带宽为6、24和42的移动平均;x轴:时间,y轴:搜索百分比

    带宽的选择至关重要,但不清楚如何选择带宽。 如果带宽太小,我们可能无法摆脱季节性波动。 如果带宽太大,我们可能无法捕捉到趋势。 例如,如果我们选择带宽b = 0,则具有原始数据及其季节性。 相反,如果b = n,我们仅获得所有观测值的平均值,而看不到任何趋势。

    在此示例中,b = 6个月是“平滑”季节性因素的合理选择,因为我们计算的是整个年度(13个月)的平均值。 但是,b = 12或b = 18是同等有效的选择。 根据b的选择,我们将更多的权重赋予与时刻t(b = 12)相同的季节或相反季节(b = 6或b = 18)的观测值。 减轻此问题的可能解决方案是为观察值赋予不同的权重,从而计算加权平均值而不是简单平均值。

    理论上讲,接近时间t的观测比更远的观测更重要,并且权重更大。 这使我们可以选择更大的带宽b,同时将更多的权重分配给更重要的观察。 例如,对于时间t的观测,我们可以赋予权重1;对于距离i为i = 1,…,11的观测,我们可以赋予1-i / 12权重;对于i = 1,…, b-1和带宽b(请参见图3)。

    图3:带宽为6、24和42的加权移动平均线; x轴:时间,y轴:搜索百分比

    这是核估计背后的基本思想:对不同距离的观测值赋予不同的权重。

    权重(1-i/b) 的上述选择相当随意,其他权重也可以理解。 我们可以将加权移动平均值归纳如下:令b为带宽,K为核,即具有某些其他性质的函数,例如非负[K(x)≥0]对称性[K(x)= K (-x)]和归一化[K上的积分为1]。 许多内核都支持间隔[-1,1],这意味着它们在间隔之外为0。

    内核的重要示例是| x |的Epanechnikov 内核K(x) = 3/4 (1-x²) 当 |x| ≤ 1 和高斯核K(x)= 1 / sqrt(2π)exp(-x²/ 2)。

    基于内核K和带宽b,我们将NWE(Nadaraya-Watson Estimator)定义为:

    在图4中,我们看到具有高斯核且带宽b = 12的NWE。 内核和带宽的选择仍然很重要,但是具有频繁使用内核的估计器(例如Epanechnikov,Quartic或Gaussian)在带宽选择方面比移动平均估计器更健壮。

    注意,简单移动平均估计量本身是具有统一核K(x)= 1/2的核估计量。 加权移动平均估计器也是一个内核估计器,wiki里面有一个和函数的整理列表,有兴趣的可以仔细查看https://en.wikipedia.org/wiki/Kernel_(statistics)#Kernel_functions_in_common_use

    图4:具有高斯核和带宽12的NEW; x轴:时间,y轴:百分比搜索

    进一步说明:首先,通常基于重新定标的时间(即i / n而不是i)来定义NEW,并且公式也会相应变化。 其次,对于距离变化的观测,可以更普遍地定义估算器。

    核密度估计

    让我们考虑另一个例子。 由于某种原因,你可能会对德国的汽油价格感兴趣。 因此,你可以上网搜索所有14,000个加油站的当前价格。 图5中是该数据的常见表示形式:直方图。 直方图显示汽油价格的分布。 块的带宽是关键参数,不同的选择会导致不同的直方图(类似于移动平均估计器的不同带宽)。

    图5:直方图显示德国(05/12/2020)分别有10个和50个垃圾箱的天然气价格频率; x轴:以EUR为单位的汽油价格; y轴:频率;

    如果我们假设天然气价格的分布是连续的,我们可能更喜欢估计和可视化基础分布的密度函数。 这个想法的原理很简单:对于天然气价格范围内的任何一点,我们都会计算价格接近该点的频率,并给予较接近的价格更多的权重,而向较远的价格赋予较小的权重。

    如果“距离决定权重”是确定正确的, 那么我们将重点关注这个调节,这就是是内核回归背后的想法。

    数据X(1),…,X(n)的核密度估计器的定义与NWE非常相似。 给定一个内核K且带宽h> 0,定义

    通常使用与核回归情况相同的核函数(例如,高斯,Epanechnikov或Quartic)。 核密度估计可以解释为提供关于底层数据生成过程的分布的平滑的直方图。 内核和带宽的选择同样至关重要(有关不同的估算器,请参见图6)。

    图6:不同内核(上:Epanechnikov,下:高斯)和不同带宽(左:0.05,右:0.1)下天然气价格密度的KDE;x轴:天然气价格(欧元);轴:频率

    在Python中实现

    为了展示内核回归,我们使用Google搜索一词中的Chocolate一词的数量,该词可在Google Trends中下载。 如果保存为kde_chocolate.csv,则以下Python脚本将计算NWE并绘制图4:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from statsmodels.nonparametric.kernel_regression import KernelReg
    
    df = pd.read_csv('kde_chocolate.csv')
    
    n = df.shape[0]
    kde = KernelReg(endog=df['chocolate'], exog=np.arange(n), var_type='c', bw=[12])
    
    estimator = kde.fit(np.arange(n))
    estimator = np.reshape(estimator[0],n)
    
    fig, ax = plt.subplots(figsize=(10,5))
    ax.plot(df['month'], df['chocolate'], '-',alpha=0.5)
    ax.plot(df['month'], estimator, '-', color='tab:blue', alpha=0.8)
    ax.set_ylim(bottom=30, top=105)
    ax.set_xticks(['2005-01','2010-01','2015-01','2020-01'])
    
    plt.show()
    

    考虑到德国不同加油站的汽油价格,其中“ station_uuid”和“ e5”列保存在kde_gas_data.csv中,可通过以下脚本获得类似于图6的图。 可以通过Azure Repo获取数据(https://dev.azure.com/tankerkoenig/_git/tankerkoenig-data)。

    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.neighbors import KernelDensity
    import numpy as np
    
    # Load data and remove outliers
    df = pd.read_csv('kde_gas_data.csv')[['station_uuid', 'e5']]
    df = df.groupby(['station_uuid']).mean()
    df = df[df['e5'] > 0]
    df = df.sort_values('e5')[round(df.shape[0]*0.001):round(df.shape[0]*0.999)]
    
    # Calculate and plot KDEs
    fig, ax = plt.subplots(2, 2, sharex=True, sharey=True, figsize=(10,6))
    X = df['e5'][:,np.newaxis]
    X_plot = np.linspace(1,1.6,1000)[:,np.newaxis]
    zeros = np.zeros(1000)
    
    kde = KernelDensity(kernel='epanechnikov', bandwidth=0.05).fit(X)
    log_dens = kde.score_samples(X_plot)
    ax[0, 0].fill_between(X_plot[:, 0], zeros, np.exp(log_dens), fc='#AAAAFF')
    
    kde = KernelDensity(kernel='epanechnikov', bandwidth=0.1).fit(X)
    log_dens = kde.score_samples(X_plot)
    ax[0, 1].fill_between(X_plot[:, 0], zeros, np.exp(log_dens), fc='#AAAAFF')
    
    
    kde = KernelDensity(kernel='gaussian', bandwidth=0.05).fit(X)
    log_dens = kde.score_samples(X_plot)
    ax[1, 0].fill_between(X_plot[:, 0], zeros, np.exp(log_dens), fc='#AAAAFF')
    
    kde = KernelDensity(kernel='gaussian', bandwidth=0.1).fit(X)
    log_dens = kde.score_samples(X_plot)
    ax[1, 1].fill_between(X_plot[:, 0], zeros, np.exp(log_dens), fc='#AAAAFF')
    
    plt.show()
    

    总结

    在两种情况下(内核回归和内核密度估计),我们都必须选择内核和窗口的带宽。 由于常用的内核具有相似的形状(请参见图7),因此带宽的选择更为关键。 关于带宽选择,有大量文献。 在应用程序中,两种方法占主导地位:拇指法则带宽估计器(例如Silverman的经验法则)和交叉验证(尤其是用于内核回归)。

    图7:常用的内核函数:高斯(左上),Epanechnikov(右上),四次(左下),均匀(右下)

    由于大多数内核函数是平滑的(或至少是连续可微的),因此得出的估计量也是平滑的。 因此,呈现形式的核回归仅对于足够平滑的回归/密度函数才有意义。

    NWE是一类更广泛的非参数估计器的特例,即局部多项式估计器。

    基于内核的估计器非常有用,并适用于许多情况。 甚至k最近邻算法也可以被视为具有统一内核和可变带宽的基于内核的估计器。 正如我们可以采用其他内核一样,这种范例为我们提供了新的可能性,从而为不同的点赋予了不同的权重。

    我相信基于核的估计的概念对数据科学家来说很重要,希望你能建立一些直观的理解。

    作者:Florian Heinrichs

    deephub翻译组

    展开全文
  • 非参数估计 -密度估计(KDE)

    千次阅读 2019-01-15 19:39:56
    元学习论文总结||小样本学习论文总结 ...密度估计其实是对直方图的一个自然拓展。 首先考虑一下密度函数的概念,很自然的可以想到,密度函数就是分布函数的一阶导数。那么当我们拿到一些数据...
  • 1、概率密度函数 在分类器设计过程中(尤其是贝叶斯分类器),需要在类的先验概率和类条件概率密度均已知的情况下,按照一定的决策规则确定判别函数和决策面。但是,在实际应用中,类条件...这种估计方法,通常称之为
  • 非参数回归函数核估计的一致强收敛速度 (1986年)
  • 机器学习(二)非参数估计matlab例程 2018/2/19 by ChenjingDing 问题描述: 分别使用K近邻和核函数的方法。为输入样本xˆx^\widehat{x}估计概率密度函数。xˆx^\widehat{x} = linspace(-5, 5, 100); 假设...
  • 函数估计非参数方法

    千次阅读 2017-08-16 09:34:20
    用于函数估计非参数方法主要有核密度估计、局部多项式回归估计等。参的函数估计的优点在于...密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblat
  • R语言与非参数统计(密度估计

    千次阅读 2019-06-29 11:55:41
    来源 | R友舍密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,...
  • 参数估计非参数估计

    千次阅读 2017-10-12 15:48:45
    非参数估计对解释变量的分布状况与模型的具体形式不做具体规定 ,运用密度函数与窗宽去逐步逼近,找出相应的模型。统计学中常见的一些典型分布形式不总是能够拟合实际中的分布。此外,在许多实际问题中经常遇到多...
  • 我们最终想要得到的是一个概率密度的模型,如果我们已经对观测的对象有了一些认识,对观测的现象属于那种类型的概率密度分布已经了解,只是需要确定其中的参数而已,这种情况就是属于参数估...
  • 论文研究-违约回收率密度函数模拟的非参数估计方法研究.pdf, 本文研究违约回收率密度函数的模拟估计问题. 本文的工作由两个方面组成. 首先,我们解决了在应用参数方法...
  • 很难说这些观测的数据符合什么模型,参数估计的方法就失效了,我们只有用非参数估计的办法去估计真实数据符合的概率密度模型了。 因此,本文主要讨论 参数估计非参数估计问题   1. 参数估计 对我们已经知道观测...
  • 非参数估计

    2014-11-17 10:37:24
    (1)parzen窗(核密度估计 kernel density estimate KDE),注意,虽然叫‘核密度’,但是使用的是‘窗函数’而不是核函数,一般认为核函数的作用参见‘核函数、mercer条件’ (2)k近邻 (3)神经网络
  • 主要讲述直方图与kernel density estimation,参考维基百科中的经典论述,从直方图和密度估计的实现对比来说明这两种经典的非参数密度估计方法,具体的细节不做深入剖析。
  • 针对以上问题, 在使用具有平滑参数的高斯核函数估计属性密度的基础上, 结合分类器的分类准确性标准和属性父结点的贪婪选择, 进行朴素贝叶斯分类器的网络依赖扩展. 使用UCI 中的连续属性分类数据进行实验, 结果显示...
  • 参数估计 已经知道观测数据符合某些模型的概率下,我们可以利用参数估计的方法来确定这些参数值,然后得出概率密度模型。这个过程中用到了一个条件,就是概率分布符合某些...非参数估计(无参密度估计) 实际中...
  • 目录1 概念1.1 平滑的概念和计算1.2 Nadaraya-Watson回归1.3 高斯2 高斯平滑过程-Python实现2.1 加载库和生成数据2.2 Full ...平滑是一种用来估计实值方程的统计方法,来作为周围观察数据的加权平均值。...
  • 假设参数衰退模型Yi=g(Xi)+εi,其中残差{εi}...今首先在残差基础上定义了非参数估计gn(x)和fn(x),并在适当条件下证明了gn(x)和fn(x)分别是g(x)和f(x)的强一致相合估计,同时给出了相应的收敛速度。
  • 机器学习 非参数估计

    千次阅读 2020-05-10 12:53:55
    机器学习文章目录 整理自中科大何劲松老师的机器学习课件 势函数,插值函数,核函数。把多个样本叠加起来,得到的概率分布可以近似为整体的概率分布。
  • matlab常用核函数

    2021-04-20 03:05:33
    俞梅洪 【作者单位】闽南师范大学计算机科学与工程系 ......SVM 分类核函数参数选择比较 奉国和 【摘要】支持向量机(SVM)被证实在分类领域性能良好,但其分类性能受到 核函数参数影响。讨论核函数参数对 SVM ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,079
精华内容 24,431
关键字:

非参数估计核函数