最大似然参数估计

来源:互联网 发布:windows pe如何分区 编辑:程序博客网 时间:2024/05/01 05:30

        最普遍的情况是概率密度函数并不是已知的,在很多的问题中,潜在的概率密度函数必须从可用的数据中估计。例如有时可能知道概率密度函数的类型(高斯、瑞利等),但不知道具体的参数如方差或均值;相反,有时知道一些参数,但不知道概率密度的类型。有各种各样的方法解决这个问题,根据不同的已知信息采取不同的解决办法。这里介绍最大似然参数估计。

        考虑一个M类的问题,特征向量服从p(x|wi),i=1,2,…,M的概率分布。假设似然函数以参数的形式给出,相应的参数构成未知向量θi。为了表示与θi相关,概率密度函数记为p(x|wi;θi)。目的是利用每一类中已知的特征向量集合来估计未知参数。接着进一步加假设每一类中的数据不影响其他类参数的估计,就可以用公式表达这个问题,并简化符号。最后可以各类独立地解决这样的问题。

        设x1,x2,...,xN是从概率密度函数p(x|wi;θi)中随机抽取的样本,得到联合概率密度函数p(x;θi),其中x={x1,x2,...,xN}是样本集。假设不同的样本之间具有独立的统计性,则有

                                                                            (1)

     这是一个关于θ的函数,也称为θ关于x的似然函数。用最大似然估计法(Maximum Likelihood,ML)估计θ,计算似然函数的最大值,即

                                                                                      (2)

为了得到最大值,似然函数对θ的梯度必须为0,即

                                                                                          (3)

由于对数函数的单调性,定义对数似然函数为

                                                                                       (4)

于是式(3)等价于

                                      (5)

求解式(5)得到θ,即为参数的估计值。

        例如已知概率密度函数的类型为高斯分布,对参数进行最大似然估计:设x1,x2,...,xN是来源于已知协方差矩阵、未知均值的正态分布的样本向量,即联合概率密度函数的似然函数为

                                              (6)

其中,l为样本向量的维数。求未知均值向量的最大似然估计。

         对N个可用的样本,有对数似然函数为

                                   (7)

对未知向量μ计算梯度,得

                                                                             (8)

                                                                     即

                                                                                                   (9)

由此可知,对于高斯分布,均值向量的最大似然估计是样本均值。

同理,当均值向量和协方差均未知时可求得协方差的最大似然估计为

                                                                                       (10)

接下来以matlab语言进行实验,实验思路是通过给定均值向量和协方差矩阵生成高斯分布的40000个样本数据,然后运用最大似然估计求出样本的均值向量和协方差矩阵,其MATLAB代码如下:

mu=[2 1 3];sigma=[1 0 0;0 4 0;0 0 2];r=mvnrnd(mu,sigma,40000);%得到样本数据[x,y] = size(r);% 散点的均值计算mu1 = sum(r)/x;%最大似然估计的均值是样本均值% 散点的协方差矩阵计算a = 0;for i = 1:x    a = a + (r(i,:,:) - mu1)' * (r(i,:,:) - mu1);endsigma1 = a/x;%根据最大似然估计的公式计算disp(['最大似然估计方法估计的',num2str(y),'维均值矢量为:']);disp(mu1);disp(['最大似然估计方法估计的',num2str(y),'维协方差矩阵为:']);disp(sigma1);

运行结果如下

                                              

从运行结果可知,有一定的估计误差,通过公式err=||u1-u2||来衡量估计误差,其中||·||表示向量和矩阵范数,一般取欧式范数。MATLAB代码如下

%估计误差Emu = norm((mu1 - mu),2);Esigma = norm((sigma1 - sigma),2);fprintf(['最大似然估计方法估计的',num2str(y),'维高斯分布的均值误差为:',num2str(Emu),'\n']);fprintf(['\n最大似然估计方法估计的',num2str(y),'维高斯分布的协方差误差为:',num2str(Esigma),'\n\n']);

运行结果如下:

                           

上文已经得到均值和协方差的ML估计,它们也能递归计算,即

                                                  (11)

且           (12)

证明过程如下


0 0
原创粉丝点击