机器学习算法(二十一):核密度估计 Kernel Density Estimation(KDE)-程序员宅基地

技术标签: 算法  聚类  机器学习  机器学习算法  

目录

1 分布密度函数

1.1 参数估计方法 

1.2 非参数估计 

2 直方图到核密度估计

2.1 核函数

2.2 带宽的选择

2.2.1 自适应或可变带宽的核密度估计

2.3 多维


1 分布密度函数

    给定一个样本集,怎么得到该样本集的分布密度函数,解决这一问题有两个方法:

1.1 参数估计方法 

    简单来讲,即假定样本集符合某一概率分布,然后根据样本集拟合该分布中的参数,例如:似然估计混合高斯等,由于参数估计方法中需要加入主观的先验知识,往往很难拟合出与真实分布的模型; 

1.2 非参数估计 

    和参数估计不同,非参数估计并不加入任何先验知识,而是根据数据本身的特点、性质来拟合分布,这样能比参数估计方法得出更好的模型。核密度估计就是非参数估计中的一种,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,又名Parzen窗(Parzen window)。Ruppert和Cline基于数据集密度函数聚类算法提出修订的核密度估计方法。

2 直方图到核密度估计

    给定一个数据集,需要观察这些样本的分布情况,往往我们会采用直方图的方法来进行直观的展现。该直方图的特点是简单易懂,但缺点在于以下三个方面:(1)密度函数是不平滑的;(2)密度函数受子区间(即每个直方体)宽度影响很大,同样的原始数据如果取不同的子区间范围,那么展示的结果可能是完全不同的。如下图中的前两个图,第二个图只是在第一个图的基础上,划分区间增加了0.75,但展现出的密度函数却看起来差异很大;(3)直方图最多只能展示2维数据,如果维度更多则无法有效展示。

    除此之外,直方图还存在一个问题,那就是直方图展示的分布曲线并不平滑,即在一个bin中的样本具有相等的概率密度,显然,这一点往往并不适合。解决这一问题的办法时增加bins的数量,当bins增到到样本的最大值时,就能对样本的每一点都会有一个属于自己的概率,但同时会带来其他问题,样本中没出现的值的概率为0,概率密度函数不连续,这同样存在很大的问题。如果我们将这些不连续的区间连续起来,那么这很大程度上便能符合我们的要求,其中一个思想就是对于样本中的某一点的概率密度,如果能把邻域的信息利用起来,那么最后的概率密度就会很大程度上改善不连续的问题,为了方便观察,我们看另外一副图。 

    一个很自然的想法是,如果我们想知道X=x处的密度函数值,可以像直方图一样,选一个x附近的小区间,数一下在这个区间里面的点的个数,除以总个数,应该是一个比较好的估计。用数学语言来描述,如果你还记得导数的定义,密度函数可以写为:

    

    现在我们假设要求x处的密度函数值,根据上面的思想,如果取 x 的邻域[x-h,x+h],当h->0的时候,我们便能把该邻域的密度函数值当作x点的密度函数值。用数学语言写就是:

    

    是该邻域中的样本点数量,样本集的总数量,最后对该邻域内的密度值取平均便得到 x 点的密度函数值f(x)。把上面的式子进行改写,即:核密度估计(Kernel density estimation),是一种用于估计概率密度函数的非参数方法,为独立同分布 F n 个样本点,设其概率密度函数为 f:

        

    这里 h 如果选的太大,肯定不符合 h 趋向于 0 的要求。h 选的太小,那么用于估计 f(x) 的点实际上非常少。这也就是非参数估计里面的 bias-variance tradeoff,也就是偏差和方差的平衡。这样后还是存在一个问题,那就是概率密度函数依然不够平滑(因为两个数之间的存在无数个数)。

    记 ,那么:

         

    由于需要满足概率密度的积分为1,所以:

        

    也就是要满足 K(t) 的积分等于1也就满足了的积分为1。如果把 K(t) 当作其他已知的概率密度函数,那么问题就解决了,最后的密度函数也就连续了。

2.1 核函数

    从支持向量机、meansift都接触过核函数,应该说核函数是一种理论概念,但每种核函数的功能都是不一样的,这里的核函数有uniform,triangular, biweight, triweight, Epanechnikov,normal等。这些核函数的图像大致如下图: 

    有言论称Epanechnikov 内核在均方误差意义下是最优的,效率损失也很小。由于高斯内核方便的数学性质,也经常使用 K(x)= ϕ(x)ϕ(x)为标准正态概率密度函数。 
    从上面讲述的得到的是样本中某一点的概率密度函数,那么整个样本集应该是怎么拟合的呢?将设有N个样本点,对这N个点进行上面的拟合过后,将这N个概率密度函数进行叠加便得到了整个样本集的概率密度函数。例如利用高斯核对X={x1=−2.1,x2=−1.3,x3=−0.4,x4=1.9,x5=5.1,x6=6.2} 六个点的“拟合”结果如下:

    

  • 在直方图中,横轴间隔为2,数据落到某个区间,此区间y轴增加1/12。
  • 在核密度估计中,另正态分布方差为2.25,红色的虚线表示由每一个数据得到的正态分布,叠加一起得到核密度估计的结果,蓝色表示。

     那么问题就来了,如何选定核函数的“方差”呢?这其实是由h来决定,不同的带宽下的核函数估计结果差异很大,如下图:

(Kernel density estimate (KDE) with different bandwidths of a random sample of 100 points from a standard normal distribution. Grey: true density (standard normal). Red: KDE with h=0.05. Black: KDE with h=0.337. Green: KDE with h=2.)

2.2 带宽的选择

    在核函数确定之后,比如上面选择的高斯核,那么高斯核的方差,也就是h(也叫带宽,也叫窗口,我们这里说的邻域)应该选择多大呢?不同的带宽会导致最后的拟合结果差别很大。同时上面也提到过,理论上h->0的,但h太小,邻域中参与拟合的点就会过少。那么借助机器学习的理论,我们当然可以使用交叉验证选择最好的h。另外,也有一个理论的推导给你选择h提供一些信息。 
    在样本集给定的情况下,我们只能对样本点的概率密度进行计算,那拟合过后的概率密度应该和计算的值更加接近才好,基于这一点,我们定义一个误差函数,然后最小化该误差函数便能为h的选择提供一个大致的方向。选择最小化L2风险函数,即均平方积分误差函数(mean intergrated squared error),该函数的定义是:

        

    在weak assumptions下, ,其中AMISE为渐进的MISE。而AMISE有:

        

    其中:

        

    最小化MISE(h)等价于最小化AMISE(h),求导,令导数为0有:

        

    得:

        

    当核函数确定之后,h公式里的Rmf”都可以确定下来,h便存在解析解。

    有:

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

    如果使用高斯核函数进行核密度估计,则 h 的最优选择(即使平均积分平方误差最小化的带宽)为 

        

    这里  是样品的标准差。这种近似称为正态分布近似高斯近似,或Silverman(1986)经验法则。虽然这个经验法则很容易计算,但应谨慎使用,因为当密度不接近正态时,可能会产生泛化极差的估计。

    这里带宽的作用简述: 

  1. 在数据可视化的相关领域中,带宽的大小决定了核密度估计函数(KDE)的平滑(smooth)程度,带宽越小越undersmooth,带宽越大越oversmooth。
  2. 在POI兴趣点推荐领域,或位置服务领域,带宽h的设置主要与分析尺度以及地理现象特点有关。较小的带宽可以使密度分布结果中出现较多的高值或低值区域,适合于揭示密度分布的局部特征,而较大的带宽可以在全局尺度下使热点区域体现得更加明显。另外,带宽应与兴趣点的离散程度呈正相关,对于稀疏型的兴趣点分布应采用较大的带宽,而对于密集型的兴趣点则应考虑较小一些的带宽。

2.2.1 自适应或可变带宽的核密度估计

    如果带宽不是固定的,而是根据样本的位置而变化(其变化取决于估计的位置(balloon estimator)样本点(逐点估计pointwise estimator)),则会产生一种特别有力的方法,称为自适应或可变带宽的核密度估计。就POI兴趣点推荐来说,由于密集的城市地区的签到密度很高,人烟稀少的农村地区的签到密度较低。就是说不同位置应该采取不同的分析尺度,因此本文采用不固定的带宽来进行核密度估计。

    说到这, 有些朋友可能不知道POI兴趣点推荐是啥意思, 这里简单的说一下:POI是Point-of-Interest的意思,即兴趣点。就是说,给用户推荐其感兴趣的地点。就这么简单。在推荐系统相关领域,兴趣点推荐是一个非常火爆的研究课题。这里会用到核密度估计的方法,比如这篇论文:Jia-Dong Zhang,Chi-Yin Chow.(2015)GeoSoCa: Exploiting Geographical, Social and Categorical Correlations for Point-of-Interest Recommendations.SIGIR’15, August 09 - 13, 2015, Santiago, Chile.就利用了可变带宽的核密度估计方法。

    这里再简单讨论一下自适应带宽的核密度估计方法。自适应带宽的核密度估计方法是在固定带宽核密度函数的基础上,通过修正带宽参数为而得到的,其形式如式所示: 

        

        

        

    这里 k(x) 是带宽为  的核密度估计函数,M 是样例的个数,看出来了吧,每一个点 j 都有一个带宽 ,因此这叫自适应或可变。K(x) 是核函数,这里用了高斯核函数,当然也可以是其他的核函数。0≤α≤1,为灵敏因子,通常 α 取0.5,α=0 时,自适应带宽的核密度估计就变成了固定带宽的核密度估计了。固定带宽的核密度估计就是前面说的核密度估计。ω 表示带宽的参数。 

2.3 多维

    还可以扩展到多维,即:

        

    其中dx的维数,K为多维的kernel,一般为d个一维kernel的乘积

核密度估计 Kernel Density Estimation(KDE):核密度估计 Kernel Density Estimation(KDE)_NeverMore_7的博客-程序员宅基地_核密度估计

核密度估计(Kernel density estimation):核密度估计(Kernel density estimation)_Starworks的博客-程序员宅基地_核密度

什么是核密度估计?如何感性认识?:什么是核密度估计?如何感性认识? - 知乎

核密度估计Kernel Density Estimation(KDE)概述 密度估计的问题:核密度估计Kernel Density Estimation(KDE)概述 密度估计的问题 - 简书

自适应带宽的核密度估计可以参考维基百科:https://en.wikipedia.org/wiki/Variable_kernel_density_estimation

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39910711/article/details/107307509

智能推荐

使用JDBC连接数据库出现 The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents more than one解决方案_jdbc.properties timezone-程序员宅基地

文章浏览阅读553次。在 jdbc.properties 文件中的 url 后面加上 ?serverTimezone=UTC加入之前的jdbc.properties文件:user=rootpassword=12345678url=jdbc:mysql://localhost:3306/testdriverClass=com.mysql.cj.jdbc.Driver加入之后:user=rootpassword=12345678url=jdbc:mysql://localhost:3306/test?serv_jdbc.properties timezone

计算机图形学孔令德基础知识,计算机图形学基础教程孔令德答案-程序员宅基地

文章浏览阅读1.4k次。计算机图形学基础教程孔令德答案【篇一:大学计算机图形学课程设】息科学与工程学院课程设计任务书题目:小组成员:巴春华、焦国栋成员学号:专业班级:计算机科学与技术、2009级本2班课程:计算机图形学指导教师:燕孝飞职称:讲师完成时间: 2011年12 月----2011年 12 月枣庄学院信息科学与工程学院制2011年12 月20日课程设计任务书及成绩评定12【篇二:计算机动画】第一篇《计算机图形学》..._计算机图形学基础教程 孔令德 答案

python xlwings追加数据_大数据分析Python库xlwings提升Excel工作效率教程-程序员宅基地

文章浏览阅读1k次。原标题:大数据分析Python库xlwings提升Excel工作效率教程Excel在当今的企业中非常非常普遍。在AAA教育,我们通常建议出于很多原因使用代码,并且我们的许多数据科学课程旨在教授数据分析和数据科学的有效编码。但是,无论您偏爱使用大数据分析Python的程度如何,最终,有时都需要使用Excel来展示您的发现或共享数据。但这并不意味着仍然无法享受大数据分析Python的某些效率!实际上,..._xlwings通过索引添加数据

java8u211_jre864位u211-程序员宅基地

文章浏览阅读911次。iefans为用户提供的jre8 64位是针对64位windows平台而开发的java运行环境软件,全称为java se runtime environment 8,包括Java虚拟机、Java核心类库和支持文件,不包含开发工具--编译器、调试器和其它工具。jre需要辅助软件--JavaPlug-in--以便在浏览器中运行applet。本次小编带来的是jre8 64位官方版下载,版本小号u211版..._jre8是什么

kasp技术原理_KASP基因分型-程序员宅基地

文章浏览阅读5k次。KASP基因分型介绍KASP(Kompetitive Allele-Specific PCR),即竞争性等位基因特异性PCR,原理上与TaqMan检测法类似,都是基于终端荧光信号的读取判断,每孔反应都是采用双色荧光检测一个SNP位点的两种基因型,不同的SNP对应着不同的荧光信号。KASP技术与TaqMan法类似,它与TaqMan技术不同的是,它不需要每个SNP位点都合成特异的荧光引物,它基于独特的..._kasp是什么

华为p50预装鸿蒙系统,华为p50会不会预装鸿蒙系统_华为p50会预装鸿蒙系统吗-程序员宅基地

文章浏览阅读154次。华为现在比较火的还真就是新开发的鸿蒙系统了,那么在即将上市的华为p50手机上会不会预装鸿蒙系统呢?接下来我们就来一起了解一下华为官方发布的最新消息吧。1.华为p50最新消息相信大家都知道,随着华为鸿蒙OS系统转正日期临近,似乎全网的花粉们都在关注华为鸿蒙OS系统优化、生态建设等等,直接忽略了不断延期发布的华为P50手机,如今华为P50系列手机终于传来了最新的好消息,在经过一系列方案修改以后,终于被..._华为手机p50直接预装鸿蒙系统

随便推点

python用什么软件编程好-初学python编程,有哪些不错的软件值得一用?-程序员宅基地

文章浏览阅读2.1k次。Python编程的软件其实许多,作为一门面向大众的编程言语,许多修正器都有对应的Python插件,当然,也有特地的PythonIDE软件,下面我简单引见几个不错的Python编程软件,既有修正器,也有IDE,感兴味的朋友可以本人下载查验一下:1.VSCode:这是一个轻量级的代码修正器,由微软规划研发,免费、开源、跨途径,轻盈活络,界面精练,支撑常见的自动补全、语法提示、代码高亮、Git等功用,插..._python入门学什么好

pytorch一步一步在VGG16上训练自己的数据集_torch vgg训练自己的数据集-程序员宅基地

文章浏览阅读3.2w次,点赞30次,收藏307次。准备数据集及加载,ImageFolder在很多机器学习或者深度学习的任务中,往往我们要提供自己的图片。也就是说我们的数据集不是预先处理好的,像mnist,cifar10等它已经给你处理好了,更多的是原始的图片。比如我们以猫狗分类为例。在data文件下,有两个分别为train和val的文件夹。然后train下是cat和dog两个文件夹,里面存的是自己的图片数据,val文件夹同train。这样我们的..._torch vgg训练自己的数据集

毕业论文管理系统设计与实现(论文+源码)_kaic_论文系统设计法-程序员宅基地

文章浏览阅读968次。论文+系统+远程调试+重复率低+二次开发+毕业设计_论文系统设计法

在python2与python3中转义字符_Python 炫技操作:五种 Python 转义表示法-程序员宅基地

文章浏览阅读134次。1. 为什么要有转义?ASCII 表中一共有 128 个字符。这里面有我们非常熟悉的字母、数字、标点符号,这些都可以从我们的键盘中输出。除此之外,还有一些非常特殊的字符,这些字符,我通常很难用键盘上的找到,比如制表符、响铃这种。为了能将那些特殊字符都能写入到字符串变量中,就规定了一个用于转义的字符 \ ,有了这个字符,你在字符串中看的字符,print 出来后就不一定你原来看到的了。举个例子>..._pytyhon2、python3对%转义吗

java jar 文件 路径问题_「问答」解决jar包运行时相对路径问题-程序员宅基地

文章浏览阅读1.3k次。我这几天需要做一个Java程序,需要通过jar的形式运行,还要生成文件。最终这个程序是要给被人用的,可能那个用的人还不懂代码。于是我面临一个问题:生成的文件一定不能存绝对路径。刚开始我想得很简单,打绝对路径改成相对路径不就行了吗?于是有了这样的代码:String path = "../test.txt";File file = new File(path);……这个写法本身并没有问题,直接运行代码..._jar启动文件路径中存在!

微信读书vscode插件_曾经我以为 VSCode 是程序员专属的工具,直到发现了这些……...-程序员宅基地

文章浏览阅读598次。如果你知道 VSCode,一说起它,你可能第一个想到的就是把它当做一个代码编辑器,而它的界面应该可能大概率是这样的——如果你恰好又是个程序员,那你可能经常会用到它,不管是 Python、JS 还是 C++ 等各种语言对应的文件,都可以用它来进行简单的编辑和整理,甚至是运行和 debug......但是今天要讲的显然不是这些,经过小美的多方研究,发现了即使是对于大多数并不了解 VSCode,也完全不..._vscode weixin read

推荐文章

热门文章

相关标签