maigicku 发表于 2010-4-13 16:06

关于曲线拟合时出现的问题

我有一些数据,用ksdensity画出这些数据的概率分布图,然后用带有双参数的函数{a/b*(abs(x).^(a-1)).*exp(-abs(x).^a/b)}进行曲线拟合,想求出两个参数值a,b。但问题是拟合后的图像如下图所示:


其中,黑色的线是数据的概率分布曲线,红线是函数的拟合曲线,效果非常不好。。请问,有什么办法解决呢?程序如下:

clear;clc
Yres=load('H:\DctResidual.txt');
=ksdensity(Yres(:));
a0=;
options=optimset('fminsearch');
options.TolX=0.000001;            % 控制被估参数的迭代精度
options.Display='off';                  % 避免显示收敛信息
a=fminsearch(@funcexps,a0,options,xi,Y);   % 计算二乘残差最小时的参数估计
y_est=a(1)/a(2)*(abs(xi).^(a(1)-1)).*exp(-(abs(xi).^a(1))/a(2));%Weibull分布
figure,plot(xi,Y,'.k',xi,y_est,'-r')


funcexps函数如下:

function E=funcexps(a,x,y)
x=x(:);
y=y(:);
Y=a(1)/a(2)*(abs(x).^(a(1)-1)).*exp(-(abs(x).^a(1))/a(2));    %韦布尔分布
E=sum((y-Y).^2);                                                                  % 二乘残差


数据文件:

[ 本帖最后由 maigicku 于 2010-4-13 16:07 编辑 ]

ChaChing 发表于 2010-4-14 00:21

统计的东西忘干净了! :@L
但此现象直觉LZ所用的拟合函数或许不适当!?
ksdensity使用的default好像是normal!
同待高人路过

maigicku 发表于 2010-4-15 09:05

真的不希望函数不合适。后来用MATLAB自带的curve fitting工具进行拟合,效果也不好,主要是黑线的点太集中在两边的,拟合时是按95%置信区间来拟合,因而优先选择拟合的是两边的点。。。囧~~~

xiezhh 发表于 2010-4-19 10:48

对于这种尖峰厚尾的分布,很难确定其密度函数,在金融风险分析中经常会遇到这种类型的分布,通常的做法是用t分布来描述分布的尾部特征。其实用核密度函数描述它就行了,没必要在核密度估计的基础上再做拟合。

maigicku 发表于 2010-4-19 16:34

回复 地板 xiezhh 的帖子

感谢谢老师的回复。。不过我用ksdensity做的分布是图像的DCT系数分布,而我现在研究的内容是要找到一个合适的函数模型去逼近这个DCT系数分布。。现在目前最好的逼近函数是Cauchy,所以我要找到一个更加逼近DCT系数分布的一个函数。。请谢老师帮忙解答一下,这种情况应怎么处理?还是说这个函数不合适,应找另外的函数来逼近?如果是重新找的话,什么函数会更加合适呢?

xiezhh 发表于 2010-4-19 18:29

柯西(Cauchy)分布不能很好的描述你的数据,想要找到一个合适的密度函数来描述你的数据是很困难的,我也一直没有找到合适的密度函数,我继续研究研究。

maigicku 发表于 2010-4-20 08:33

感谢谢老师帮忙。。

baogangshi@gmai 发表于 2011-9-28 16:58

xiezhh 发表于 2010-4-19 18:29 static/image/common/back.gif
柯西(Cauchy)分布不能很好的描述你的数据,想要找到一个合适的密度函数来描述你的数据是很困难的,我也一 ...

请问老师,如果cdf函数的曲线用什么来拟合效果较好呢?
页: [1]
查看完整版本: 关于曲线拟合时出现的问题