在之前的学习中,我们总是假设概率密度函数的参数形式已知,并在此条件下处理有监督学习过程。而在现实世界中,我们给出的概率密度函数很少符合实际情况,本节我们讨论非参数化方法(non-parametric method),它可以处理任意的概率分布而不必假设密度的参数形式已知。大体上还是遵循着贝叶斯决策论,主要有两个非参数估计的方向:

  • 从训练样本中估计类条件概率密度:p(x∣ωi)p(\textbf{x}|\omega_i)p(x∣ωi​)
  • 直接估计后验概率:P(ωj∣x)P(\omega_j|\textbf{x})P(ωj​∣x)

文章目录

  • 一 概率密度的估计
  • 二 Parzen窗方法
    • 2.1 原理
    • 2.2 窗宽hnh_nhn​的影响
  • 三 K-Nearest Neighbor方法
  • 四 后验概率的估计
  • 五 最近邻规则
  • 参考

一 概率密度的估计

估计类条件概率密度的最基本的一个条件就是:一个向量x落在区域RRR中的概率为
P(x∈R)=∫Rp(x′)dx′P(\textbf{x} \in R)=\int_{R}p(\textbf{x}{'})d\textbf{x}' P(x∈R)=∫R​p(x′)dx′
P(x∈R)P(\textbf{x} \in R)P(x∈R)是在区域RRR上p(x)p(\textbf{x})p(x)关于xxx的导数的积分(相当于区域R内每个点的概率密度函数的积分,概率密度函数的积分就是概率函数),因此概率PPP是概率密度函数p(x)p(\textbf{x})p(x)的平滑(或取平均)的版本,因此我们可以通过概率PPP来估计概率密度函数p(x)p(\textbf{x})p(x)。

先假设p(x)p(\textbf{x})p(x)是连续的,并且区域RRR足够小,以至于在这个区间中条件概率密度p(x)p(\textbf{x})p(x)几乎没有变化,若其中VRV_RVR​表示区域RRR所包含的体积(二维面积,三维代表体积)有:
PR=P(x∈R)=∫Rp(x′)dx′≈p(x)∫Rdx′=p(x)VRP_R=P(\textbf{x} \in R)=\int_{R}p(\textbf{x}{'})d\textbf{x}'\approx p(\textbf{x})\int_{R}d\textbf{x}'=p(\textbf{x})V_R PR​=P(x∈R)=∫R​p(x′)dx′≈p(x)∫R​dx′=p(x)VR​
假设n个样本x1,x2,...,xnx_1,x_2,...,x_nx1​,x2​,...,xn​都是根据概率密度函数p(x)p(\textbf{x})p(x)独立同分布(i,i,d)的抽取而得到的,其中有k个样本落在RRR区域中的概率服从二项式定理:
K∼B(n,PR),P(K=k)=(nk)PRk(1−PR)n−kE[K]=nPRK\sim B(n,P_R),\;P(K=k)=\binom{n}{k}P_R^k(1-P_R)^{n-k}\\ E[K]=nP_R K∼B(n,PR​),P(K=k)=(kn​)PRk​(1−PR​)n−kE[K]=nPR​
当样本足够大时,综合(2)式与(3)式,我们能够得到p(x)p(\textbf{x})p(x)的估计为:
p(x)≈E[K]/nVRp(\textbf{x})\approx \frac{E[K]/n}{V_R} p(x)≈VR​E[K]/n​
让kRk_RkR​代表区域RRR中样本的确切数量,有:
p(x)≈kR/nVRp(\textbf{x})\approx \frac{k_R/n}{V_R} p(x)≈VR​kR​/n​

推导过程如下图所示:

类比利用频率直方图估计概率密度函数,理论上当我们的样本足够多,同时频率分布直方图组距设置的特别小,就是在逼近样本点的真实概率密度函数【2】:

为了估计点x\textbf{x}x处的概率密度函数,构造了一系列的包含x\textbf{x}x的区域R1,R2,...,RnR_1,R_2,...,R_nR1​,R2​,...,Rn​,其中第一个区域使用一个样本,第二个区域使用2个样本…,记VnV_nVn​为区域RnR_nRn​的体积,knk_nkn​为落在RnR_nRn​中的样本的个数,而pn(x)p_n(\textbf{x})pn​(x)表示对p(x)p(\textbf{x})p(x)的第n次估计:
pn(x)=kR/nVRp_n(\textbf{x})= \frac{k_R/n}{V_R} pn​(x)=VR​kR​/n​
要求估计的概率密度函数收敛到真实值:
limpn(x)n→∞=p(x)\underset{n\to\infty}{limp_n(\textbf{x})}=p(\textbf{x}) n→∞limpn​(x)​=p(x)
必须满足以下三个条件,以及他们分别代表的意义【3】:

  • 随着样本数量的增加,体积尽可能小,类比频率分布直方图的组距尽可能小
  • 在小区域RnR_nRn​内有足够多的样本,保证频率之比能够收敛到概率
  • 在小区域RnR_nRn​内的样本数在总样本中所占的比例是很小的一部分

有两种经常采用的估计途径:

  • Parzen窗:根据某一个确定的体积函数,比如Vn=1nV_n= \frac{1}{\sqrt{n}}Vn​=n​1​,来逐渐收缩一个给定的初始区间。(要求kn,kn/nk_n,k_n/nkn​,kn​/n能保证pn(x)p_n(\textbf{x})pn​(x)能收敛到p(x)p(\textbf{x})p(x))
  • K-nearest-neighbor:确定knk_nkn​为n的某个函数,比如kn=nk_n=\sqrt{n}kn​=n​,这样体积必须逐渐生长,直到最后能包进x\textbf{x}x的knk_nkn​个相邻点。

这两种方法最终都能收敛到真实概率,但在有限样本下效果不好

二 Parzen窗方法

2.1 原理

假设区间RnR_nRn​是一个d维的超立方体,如果hnh_nhn​表示超立方体一条边的长度,则体积为:Vn=hndV_n=h_n^dVn​=hnd​,通过定义最简单的方型窗函数,得到点x’\textbf{x}’x’是否落在落在窗中:

φ(x−x′hn)={1∣xj−xj′∣≤hn/2j=1,...d0其他\varphi(\frac{\textbf{x}-\textbf{x}'}{h_n})=\left\{\begin{matrix} 1 &|x_j-x_j'|\leq h_n/2\;j=1,...d\\ 0& 其他 \end{matrix}\right. φ(hn​x−x′​)={10​∣xj​−xj′​∣≤hn​/2j=1,...d其他​
该窗函数定义了一个d维空间中,中心点在点x\textbf{x}x的超立方体。因此knknkn代表超立方体中的样本个数是

代入公式(11)得到Parzen窗概率密度函数

**窗口函数本质上是出现在该区域RnR_nRn​内部的采样点的加权频数,可以看做是一种平滑。**更一般的,窗函数φ\varphiφ并不一定是超立方体定义的函数,它可以是任意形式只要保证:Vn=hndV_n=h_n^dVn​=hnd​

另一个常见的高斯窗口函数如下:

高斯窗口函数,随着采样点与中心点距离的增大而减小。

当采用高斯窗口函数时,knk_nkn​是出现在该区域RnR_nRn​内部的采样点的加权频数,每个采样点的权重取决于它们与中心xxx的距离。

回过头来看Parzen窗估计的概率密度函数
pn(x)=1n∑i=1n1Vnφ(x−xihn)p_n(\textbf{x})=\frac{1}{n} \sum_{i=1}^n \frac{1}{V_n}\varphi(\frac{\textbf{x}-\textbf{x}_i}{h_n}) pn​(x)=n1​i=1∑n​Vn​1​φ(hn​x−xi​​)
表示我们对p(x)p(\textbf{x})p(x)的估计是对一系列关于x\textbf{x}x和xi\textbf{x}_ixi​的函数做平均,在本质上,是每一个样本依据它离x\textbf{x}x的远近不同而对结果做出不同贡献。而且在进行估计前要确定一个具体形式的VnV_nVn​函数

2.2 窗宽hnh_nhn​的影响

我们定义δ(x)\delta(\textbf{x})δ(x)如下,可以重写pn(x)p_n(\textbf{x})pn​(x):

因为Vn=hndV_n=h_n^dVn​=hnd​,窗宽会显著影响δ(x)\delta(\textbf{x})δ(x)的振幅与宽度

  • 如果hnh_nhn​非常大,那么δ(x)\delta(\textbf{x})δ(x)的影响就很低,即使x\textbf{x}x距离xi\textbf{x}_ixi​很远,δ(x−xi)\delta(\textbf{x}-\textbf{x}_i)δ(x−xi​)和δ(0)\delta(\textbf{0})δ(0)的差别也不大,这种情况下,pn(x)p_n(\textbf{x})pn​(x)是n个宽的、满变的函数的叠加,因此pn(x)p_n(\textbf{x})pn​(x)非常平滑

  • 如果hnh_nhn​很小,δ(x−xi)\delta(\textbf{x}-\textbf{x}_i)δ(x−xi​)的峰值就非常大,这种情况下,pn(x)p_n(\textbf{x})pn​(x)是n个以样本为中心的尖脉冲的叠加,也就是一个充满噪声(不确定性)的估计

pn(x)p_n(x)pn​(x)的收敛性: pn(x)p_n(x)pn​(x)是样本点x1,...xnx_1,...x_nx1​,...xn​(随机变量)的函数, 所以我们希望随机变量pn(x)p_n(x)pn​(x)的均值pn‾(x)\overline{p_n}(x)pn​​(x)和方差σn2(x)\sigma^2_n(x)σn2​(x)满足:

经过证明需要满足以下条件,证明过程可参考【4】:

这就告诉我们对于VnV_nVn​的选择,当n趋向于正无穷时趋近于0,但必须以低于1/n的速率,因此常设定Vn=1/n或Vn=1/ln⁡nV_n=1/n或V_n=1/\ln nVn​=1/n或Vn​=1/lnn

总结:对于窗宽hnh_nhn​(或VnV_nVn​)的选取在很大程度上影响pn(x)p_n(\textbf{x})pn​(x)。如果VnV_nVn​太大,那么估计结果的分辨率就太低,如果VnV_nVn​太小,那么估计结果的统计稳定性就不够。当样本有限时,尽可能的取折中的估计,然而当样本个数无限,那么就可以在n增加时,让VnV_nVn​缓缓趋近于0,这样pn(x)p_n(\textbf{x})pn​(x)就收敛到某个概率密度函数p(x)p(\textbf{x})p(x)

下面举一个例子说明窗宽对估计结果的影响:


下图是一个二维Prazen窗的两类分类器,左图是小窗宽,右图为大窗宽

三 K-Nearest Neighbor方法

在Parzen窗中,最佳的窗函数的选择总是一个问题。另一种思路是固定knk_nkn​,让体积进行变化,而不是硬性的规定窗函数为落在区域RnR_nRn​内的全体样本个数knk_nkn​的某个函数。比如我们以样本点x\textbf{x}x为中心,让体积扩张,直到包含knk_nkn​个样本为止(knk_nkn​是关于n的某个特定函数)。这些样本称为点x\textbf{x}x的knk_nkn​个最近邻,带入(一)中的非参数估计公式:
p(x)≈kR/nVRp(\textbf{x})\approx \frac{k_R/n}{V_R} p(x)≈VR​kR​/n​

四 后验概率的估计

假设我们把一个体积放在点x\textbf{x}x周围,并且能够包含进k个样本,其中kik_iki​个属于类别ωi\omega_iωi​。对于联合概率密度的估计为:
pn(x,ωi)=ki/nVp_n(\textbf{x},\omega_i)=\frac{k_i/n}{V} pn​(x,ωi​)=Vki​/n​
这样对后验概率的估计就是:
pn(ωi∣x)=pn(x,ωi)∑j=1cpn(x,ωj)=kikp_n(\omega_i|\textbf{x})=\frac{p_n(\textbf{x},\omega_i)}{\sum_{j=1}^{c}p_n(\textbf{x},\omega_j)}=\frac{k_i}{k} pn​(ωi​∣x)=∑j=1c​pn​(x,ωj​)pn​(x,ωi​)​=kki​​
这里Vn,knV_n,k_nVn​,kn​的值可以由Parzen窗与K近邻决定。

  • Parzen窗方法中,VnV_nVn​必须是关于n的某个固定形式的函数,比如Vn=1/n或Vn=1/ln⁡nV_n=1/n或V_n=1/\ln nVn​=1/n或Vn​=1/lnn
  • Kn最近邻方法中,VnV_nVn​必须保证能够包含进足够的样本个数,比如kn=xk_n=\sqrt{x}kn​=x​

如果有足够多的样本点并且体积足够小就可以证明这样处理是比较准确的。

五 最近邻规则

最近邻可以看作的k=1情况下的K近邻方法,最近邻规则描述了我们只依赖某个x\textbf{x}x的单一的最近的邻居来做估计,也能达到足够好的性能:令Dn={x1,x2,...,xn}D^n=\{\textbf{x}_1,\textbf{x}_2,...,\textbf{x}_n\}Dn={x1​,x2​,...,xn​},每个样本已标记,对于测试样本点x\textbf{x}x,在集合D中距离它最近的点x′\textbf{x}'x′的类别为样本点x\textbf{x}x的类别。

最近邻规则是次优的方法,通常的误差率比贝叶斯误差要高,然而在无限训练样本的情况下,这个误差率至多不会超过贝叶斯误差率的两倍。

通过最近邻规则,我们可以把样本特征空间分为一个个小的单元格(cell),每个单元格中的点到最近邻x′\textbf{x}'x′的距离都比到别的样本点的距离要小。这个小单元格中的任意点的类别就与最近邻x′\textbf{x}'x′的类别相同。被称为:空间Voronoi网格

将相同类型的网格的边界相连就可以形成决策边界,最近邻的边界通常是不平滑的,我们可以通过扩大K值来去除噪音,平滑边界。

参考

【1】模式识别

【2】非参数估计_音程的博客-CSDN博客_非参数估计

【3】非参数估计 - 简书 (jianshu.com)

【4】经典的非参估计 (二)parzen 窗 - 知乎 (zhihu.com)

非参数估计—Parzen窗与K-nearest-neighbor相关推荐

  1. K Nearest Neighbor 算法

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  2. K NEAREST NEIGHBOR 算法(knn)

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  3. 文献记录(part81)--Clustering-based k -nearest neighbor classification for large-scale data with ...

    学习笔记,仅供参考,有错必纠 文章目录 Clustering-based k -nearest neighbor classification for large-scale data with ne ...

  4. k Nearest Neighbor Algorithm

    k Nearest Neighbor Algorithm k Nearest Neighbor(kNN) algorithm算法和k-Means算法一样,都是简单理解,但是实际效果出人意料的算法之一. ...

  5. 机器学习之深入理解K最近邻分类算法(K Nearest Neighbor)

    [机器学习]<机器学习实战>读书笔记及代码:第2章 - k-近邻算法 1.初识 K最近邻分类算法(K Nearest Neighbor)是著名的模式识别统计学方法,在机器学习分类算法中占有 ...

  6. 非参数估计-parzen窗估计和k近邻估计

    许多数据挖掘模型(贝叶斯决策模型)是基于一假设条件的:数据的概率密度函数的参数形式已知,然后去估计其参数,并且有参数估计方法,最大似然估计和贝叶斯参数估计等.这一假设是带有相当大的局限性的,第一:假设 ...

  7. 【MATLAB】Parzen窗与K近邻算法原理与代码详解

    文章目录 1.非参数估计原理 2.Parzen窗 2.1.算法原理 2.2.Matlab实现与参数探究 3.K近邻 3.1.算法原理 3.2.Matlab实现与参数探究 1.非参数估计原理 \qqua ...

  8. 机器学习——K近邻算法(KNN)(K Nearest Neighbor)

    参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...

  9. kNN算法(k近邻算法,k Nearest Neighbor)

    主要内容: 1.认识kNN算法 2.kNN算法原理 3.应用举例 4.kNN改进方法 1.认识knn算法 "看一个人怎么样,看他身边的朋友什么样就知道了",kNN算法即寻找最近的K ...

最新文章

  1. 核弹级漏洞log4shell席卷全球!危及苹果腾讯百度网易,修改iPhone名称就可触发...
  2. tcp c++ bind 端口_计算机端口到底是什么?
  3. 【哲学探讨】娱乐至死
  4. Scala泛型:协变和逆变
  5. Redis开发:发布/订阅消息示例
  6. 两个姐姐嫁人了~~~~~~~~~~`
  7. 语义化版本(semantic versioning)机制里的一些范围标识符
  8. getprocaddress得到为0_基于ZU+系列MPSoC芯片的USB3.0/2.0接口硬件设计
  9. 21款数据恢复软件,包含电脑PC、手机安卓、与苹果IOS免费下载
  10. 解决delphi7在win10上安装后无法正常使用的问题
  11. Cglib动态代理实现方式
  12. iCollections for Mac(桌面图标及文件整理工具)
  13. 广义线性模型解读必看文章
  14. 线粒体靶向的纳米递送PCN-224 纳米粒子-瑞禧
  15. 大数据----2.基础环境搭建
  16. 百田游戏2014笔试题——找到有序序列中某个值第一次出现的位置,并打印
  17. 程序员必备绘图工具,流程图、时序图、类图手到擒来!
  18. Extreme Table简介及使用
  19. python 加一个月 日期,有没有一种简单的方法可以在Python中将datetime对象增加一个月?...
  20. (十八)享元模式详解(都市异能版)

热门文章

  1. win10计算机记录,如何在win10上记录计算机屏幕,如何在win10上记录屏幕
  2. 分享一款开箱即用的qss暗黑主题
  3. 【毕业设计day05】精析代码
  4. JavaScript精华收集典藏
  5. SYSTEM32 下的几乎所有文件的简单说明(原由无忧启动论坛老毛桃出)
  6. 英语四六级作文和翻译
  7. 《Effective Objective-C 2.0》读书笔记
  8. 普元DevOps使用规范与流程
  9. 用安卓RTMP直播推流进行音频侦听时,出现播放几秒后就无法播放问题的解决方法
  10. NUC970设备驱动