PR上机实验3 - 图文

更新时间:2023-10-19 07:18:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

模式识别上机实验3: 密度的非参数估计

专业:数学与应用数学 学号: 姓名:

理论:已知一维样本x1,...,xN,给出非参数密度估计的Parson窗算法。 实践:分别产生1、16、256和16384个服从一维标准正态分布的样本,

1.分别就窗宽为h1?0.25,1,4,hN?h1/N,窗函数为高斯函数的情形估计所给样本的密度函数并画出图形。

2.分别就kN?N时用kN近邻方法估计所给样本的密度函数并画出图形。

1、实验过程

窗函数为高斯函数时,即正态函数为:

1?2u2 ??u??e2?其图像为:

1

图1

再利用Parzen窗法的基本公式

1N1pN(x)??Ni?1VN??x?xi???h?N??? ? 上式中N分别取1、16、256和16384,h1分别取0.25,1和4,VN?hN?h1/N可得到结果

图2

根据图1和图2,我们可以清楚地了解到针对不同数目的样本总数,小窗过宽或者过窄都会造成较大的误差。以N=16为例就可以清晰地看到当h1=0.25时图象粗糙,在h1=4时得到的图象就比较光滑,跟标准正态分布密度图象比较相符。

kN邻近估计

题意要求分别就kN?N时用kN近邻方法估计所给样本的密度函数并画出图形。

N可得

根据kN邻近估计的基本公式,取k???x??pN/N1 ?ViViN这里是的样本是一维的,取Vi?2R?2max?Xi?x? ,根据MATLAB程序语言,可得图3

图3

通过编程实现和分析上图,可以这种kN近邻估计也能很好实现概率密度函数的估计,最后的一个图很清晰的可以看到标准正态分布概率曲线的样子,这要求样本数目很大,达到第四幅图的样子用了16384个样本。

2、实验代码

MATLAB代码如下:

三个常用窗函数 chuanghanshu.m

function fu=chuanghanshu(u,t) if t==1

if abs(u)<=1/2 fu=1; else fu=0; end elseif t==2

fu=exp(-(u^2)/2)/sqrt(2*pi); elseif t==3

fu=exp(-abs(u)); end

绘制三个常用窗函数图像huizhiCHS.m u=-5:0.1:5;N=size(u); for i=1:N(2)

fu1(i)=chuanghanshu(u(i),1); fu2(i)=chuanghanshu(u(i),2); fu3(i)=chuanghanshu(u(i),3);

end

subplot(1,3,1),plot(u,fu1); subplot(1,3,2),plot(u,fu2); subplot(1,3,3),plot(u,fu3);

Parzen窗法 Parzen.m

function px=Parzen(X,h1) syms x;

N=size(X);N=N(2); hN=h1/sqrt(N); for i=1:N

pNx(i)=chuanghanshu((x-X(i))/hN,2)/hN/N; ezplot(pNx(i));hold on; plot(X(i),0,'*');hold on; end

px=sum(pNx);ezplot(px);hold off;

kN邻近法 KNLJ.m

function KNLJ(X,h1)

x=linspace(min(X)-0.5,max(X)+0.5,100);step=(max(X)-min(X))/100; N=size(X);N=N(2); SX=sort(X);px=0; for i=1:100

absX=sort(abs(SX-x(i)));d=absX(h1); px(i)=1/(sqrt(N)*2*d); end

plot(x,px,'r');hold off;

方窗kN邻近法 KNLJ.m

function px=FCKNLJ(X,h1)

x=linspace(min(X)-0.5,max(X)+0.5,100); N=size(X);N=N(2); SX=sort(X);px=0; for i=1:N-h1+1 XI=SX(i:i+h1-1);

u=(x-mean(XI))./(max(XI)-mean(XI)+1/2); for j=1:100 if abs(u(j))<=1

pNx(j)=1/(max(XI)-min(XI)+1)/(N-h1+1); else pNx(j)=0; end end

plot(x,pNx);hold on; plot(X(i),0,'*');hold on;

本文来源:https://www.bwwdw.com/article/khof.html

Top