https://blogcsdnnet/pipisorry/article/details/53635895
由给定样本集合求解随机变量的分布密度函数问题是概率统计学的基本问题之一。解决这一问题的方法包括参数估计和非参数估计。
参数估计又可分为参数回归分析和参数判别分析。在参数回归分析中,人们假定数据分布符合某种特定的性态,如线性、可化线性或指数性态等,然后在目标函数族中寻找特定的解,即确定回归模型中的未知参数。在参数判别分析中,人们需要假定作为判别依据的、随机取值的数据样本在各个可能的类别中都服从特定的分布。经验和理论说明,参数模型的这种基本假定与实际的物理模型之间常常存在较大的差距,这些方法并非总能取得令人满意的结果。
[参数估计:最大似然估计MLE][参数估计:文本分析的参数估计方法]
由于上述缺陷,Rosenblatt和Parzen提出了非参数估计方法,即核密度估计方法。由于核密度估计方法不利用有关数据分布的先验知识,对数据分布不附加任何假定,是一种从数据样本本身出发研究数据分布特征的方法,因而,在统计学理论和应用领域均受到高度的重视。
核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一,由Rosenblatt (1955)和Emanuel Parzen(1962)提出,又名Parzen窗(Parzen window)。Ruppert和Cline基于数据集密度函数聚类算法提出修订的核密度估计方法。
核密度估计在估计边界区域的时候会出现边界效应。
[https://zhwikipediaorg/zh-hans/核密度估计]
因此,一句话概括,核密度估计Kernel Density Estimation(KDE)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。
在密度函数估计中有一种方法是被广泛应用的——直方图。如下图中的第一和第二幅图(名为Histogram和Histogram, bins shifted)。直方图的特点是简单易懂,但缺点在于以下三个方面:密度函数是不平滑的;密度函数受子区间(即每个直方体)宽度影响很大,同样的原始数据如果取不同的子区间范围,那么展示的结果可能是完全不同的。如下图中的前两个图,第二个图只是在第一个图的基础上,划分区间增加了075,但展现出的密度函数却看起来差异很大;直方图最多只能展示2维数据,如果维度更多则无法有效展示。
核密度估计有多种内核,图3(Tophat Kernl Density)为不平滑内核,图4(Gaussian Kernel Density,bandwidth=075)为平滑内核。在很多情况下,平滑内核(如高斯核密度估计,Gaussian Kernel Density)使用场景较多。
虽然采用不同的核函数都可以获得一致性的结论(整体趋势和密度分布规律性基本一致),但核密度函数也不是完美的。除了核算法的选择外,带宽(bandwidth)也会影响密度估计,过大或过小的带宽值都会影响估计结果。如上图中的最后三个图,名为Gaussian Kernel Density,bandwidth=075、Gaussian Kernel Density,bandwidth=025、Gaussian Kernel Density,bandwidth=055
股票、金融等风险预测:在单变量核密度估计的基础上,可以建立风险价值的预测模型。通过对核密度估计变异系数的加权处理,可以建立不同的风险价值的预测模型。
密度估计中应用较多的算法是高斯混合模型以及基于近邻的核密度估计。高斯混合核密度估计模型更多会在聚类场景中应用。
[核密度估计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),也看到有人叫窗口。
核密度函数的原理比较简单,在我们知道某一事物的概率分布的情况下,如果某一个数在观察中出现了,我们可以认为这个数的概率密度很大,和这个数比较近的数的概率密度也会比较大,而那些离这个数远的数的概率密度会比较小。
基于这种想法,针对观察中的第一个数,我们可以用K去拟合我们想象中的那个远小近大概率密度。对每一个观察数拟合出的多个概率密度分布函数,取平均。如果某些数是比较重要的,则可以取加权平均。需要说明的一点是,核密度的估计并不是找到真正的分布函数。
Note: 核密度估计其实就是通过核函数(如高斯)将每个数据点的数据+带宽当作核函数的参数,得到N个核函数,再线性叠加就形成了核密度的估计函数,归一化后就是核密度概率密度函数了。
以下面3个数据点的一维数据集为例:5, 10, 15
绘制成直方图是这样的:
KDE核函数k()
理论上,所有平滑的峰值函数均可作为KDE的核函数来使用,只要对归一化后的KDE而言(描绘在图上的是数据点出现的概率值),该函数曲线下方的面积和等于1即可。
只有一个数据点时,单个波峰下方的面积为1,存在多个数据点时,所有波峰下方的面积之和为1。概而言之,函数曲线需囊括所有可能出现的数据值的情况。
常用的核函数有:矩形、Epanechnikov曲线、高斯曲线等。这些函数存在共同的特点:在数据点处为波峰;曲线下方面积为1。
单个数据点(只有一个数据时)所对应的这些核函数
[ 概率论:高斯/正态分布 ]
sklearn中实现的核函数
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://zhwikipediaorg/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库]
09 SVM - 线性不可分模型
假设: 函数Ф是一个从低维特征空间到高维特征空间的一个映射,那么如果存在函数K(x,z), 对于任意的低维特征向量x和z,都有:
称函数K(x,z)为核函数(kernal function);
核函数在解决线性不可分问题的时候,采取的方式是:使用低维特征空间上的计算来避免在高维特征空间中向量内积的恐怖计算量;也就是说此时SVM模型可以应用在高维特征空间中数据可线性分割的优点,同时又避免了引入这个高维特征空间恐怖的内积计算量。
本质: 核函数是一个低纬的计算结果,并没有采用低纬到高维的映射。只不过核函数低纬运算的结果 等价于 映射到高维时向量点积的值。
不妨还是从最开始的简单例子出发,设两个向量x 1 = (μ 1 + μ 2 ) T 和x 2 = (η 1 + η 2 ) T ,两个向量的点积是五维空间的映射,因此映射过后的内积为:
而同时我们可以发现有以下公式:
可以发现两者之间非常相似,所以我们只要乘上一个相关的系数,就可以让这两个式子的值相等,这样不就将五维空间的一个内积转换为两维空间的内积的运算。
现有有两个两维的向量,进行二阶多项式扩展,然后进行内积计算,这个时候映射高高维后计算的计算量为:11次乘法+4次加法;采用近似计算的计算量为:3次乘法+2次加法;采用加系数后的近似计算的计算量为:4次乘法+2次加法;
线性核函数(Linear Kernel): 即原函数,不做映射。
多项式核函数(Polynomial Kernel):其中γ、r、d属于超参,需要调参定义;
类似上面的函数,上面的08476是调参出来的结果。
重点:
高斯核函数(Gaussian Kernel): 其中γ属于超参,要求大于0,需要调参定义;
高斯核在实际运用中特别多 ,不仅仅是因为需要调的参数比较少。
最重要的原因是:
在sklearn中,核函数是rbf,即Radial basis functionfuntion 径向基 ;其中真正用到的核函数算法是高斯核。
PS:之前在讲加权线性回归中提过相似度的度量,其中用到的就是类似高斯核的函数。
Sigmoid核函数(Sigmoid Kernel):其中γ、r属于超参,需要调参定义;
了解即可,这个核函数别去用它,垃圾得一塌糊涂。
该算法大致上就是把Sigmoid函数变成了tan函数。
将原始数据映射到高维,然后找一个超曲面来分割它们。差不多就是我上一章一开始画的那个图。
1、 核函数可以自定义;核函数必须是正定核函数,即Gram矩阵是半正定矩阵;
2、核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算;
3、 通过核函数,可以将非线性可分的数据转换为线性可分数据;
令z=x;那么进行多维变换后,应该是同一个向量,从而可以得到以下公式:
了解核函数的构造方式,尤其是高斯核。
11 SVM - 序列最小优化算法 SMO
昨天才回答过这个问题你可以再搜搜的
Gauss消去法的分析。
其包括两个过程:
消去过程:把方程组系数矩阵A化为同解的上三角矩阵;
回代过程:按相反的顺序,从xn至x1逐个求解上三角方程组。
%高斯消去法的MATLAB程序
function x=gauss(a,b); %编写高斯消去法函数
%a表示方程组的系数矩阵,b表示方程组的值
%X表示最终的输出结果,即方程组的解
n=length(b); %计算方程组的维数
%下面的程序在不断的消去,直到变成a变成上三角矩阵未知
for k=1:n-1
for i=k+1:n
a(i,k)=a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-a(i,k)a(k,j);
end
b(i)=b(i)-a(i,k)b(k);
end
end
%表示高斯消去法的回带过程
x=zeros(n,1);
x(n)=b(n)/a(n,n);
for k=n-1:-1:1
s=b(k);
for j=k+1:n
s=s-a(k,j)x(j);
end
x(k)=s/a(k,k);
end
实例验证: %调用编好的消去法函数
A=[1,2,3;2,2,3;-1,-3,10];B=[0,3,2];gauss(A,B)
ans =
30000
-15517
00345
A=[1,2,3;2,2,3;-1,-3,10];B=[0,3,2];x=gauss(A,B)
x =
30000
-15517
00345
Ax %反代求解进行比较
ans =
00000
30000
20000
1、你是怎样调用的?照理说,如果是正常的调用,例如
1
yanyan(15,1:10,1)
应该会出现Matrix must be square的提示,而不会是too many input。
2、vectorize不是这样用的,它只能把一个char类型的表达式或sym、inline对象给替换成点运算,而对于一个double类型的数值,会强制转换为char类型,可能导致丢失精度(因为char的表示范围有限,即使在中文环境下,范围也只是0-65535,而且只能是整数)。
欢迎分享,转载请注明来源:品搜搜测评网