(本文仅用于个人学习,大部分来源于上课ppt)
非参数估计能处理任意的概率分布,而无需假设密度函数,主要的方法有直方图估计,K-NN,parzen窗估计。非参数估计的主要思想是,向量落入一个区域R的概率P为
其中直方图估计是最简单的一种:
1. 把x的每个分量分成k 个等间隔小窗,( x∈Ed ,则形成kd 个小舱)
2. 统计落入各个小舱内的样本数qi
3. 相应小舱的概率密度为: qi /(NV )( N :样本 总数,V :小舱体积)
原理:
假设N个样本的集合X={x1,x2,x3,x4...}是根据概率密度P(x)的分布独立抽取到的,那么K个样本落入区域R的概率服从二项分布:
K的期望值是E(k) = NP 对P的估计
N趋于∞大时,非常准确
假设p(x)是连续的,且R足够小使得p(x)在R内几乎没有变化。令R是包含样本点x的一个区域,其体积为V,设有N个训练样本,其中有k落在区域R中,则可对概率密度作出一个估计:
要求估计的概率密度函数收敛到真实值
必须满足
1.随着样本数的增加,小舱体积应该尽可能小,
2.同时又能保证小舱内有充分多的样本,
3.但每个小舱内的样本数又必须是总样本数中很小的一部分
Parzen窗估计
首先需要选择窗函数,Parzen窗估计过程是一个内插过程,样本xi距离x越近,对概率密度估计的贡献越大,越远贡献越小。
只要满足如下条件,就可以作为窗函数:
方窗函数:
正太分布窗函数:
指数窗函数:
其中
Parzen估计的性能与窗宽参数hn紧密相关当hn较大时,x和中心xi距离大小的影响程度变弱,估计的p(x)较为平滑,分辨率较差。当hn较小时,x和中心xi距离大小的影响程度变强,估计的p(x)较为尖锐,分辨率较好。
Parzen窗密度估计的渐近收敛性:
渐进无偏性:
一致性:
简单的例子:对于一个二类( ω1 ,ω2 )识别问题,随机抽取ω1类的6个样本X=(x1,x2,…. x6) ω1=(x1,x2,…. x6) =(x1=3.2,x2=3.6,x3=3,x4=6,x5=2.5,x6=1.1) 估计P(x|ω1)即PN(x):
选择正太分布窗函数
因为样本时一维的
简单的代码实现:
import numpy as np
import matplotlib.pyplot as plt
from pandas import Series
data = np.sort(np.array( [3.2,3.6,3,6,2.5,1.1]))
hi = 0.5/np.sqrt(6)
N = 6
hn = hi/np.sqrt(N)
Vn = hn
a = np.zeros(6)
i = 0
for x in data:
k = 0
for xi in data:
k = (1/np.sqrt(2*np.pi))*np.exp(-0.5*(np.square(np.abs(x-xi)/hn)))+k
a[i] = k/(Vn*N)
i = i+1
obj = Series(a,index=data)
obj.plot()
plt.show()
由图看出,每个样本对估计的贡献与样本间的距离有关,样本越多,PN(x)越准确。