用maximum likelihood estimation进行拟合的matlab代码
时间: 2023-05-13 18:02:49 浏览: 178
最大似然估计是一种估计模型参数的方法,通常会用到Matlab软件来进行计算。下面是一个简单的用Matlab进行最大似然估计拟合的代码示例:
假设我们要拟合一个正态分布模型,假设数据集已知,我们的目标是根据该数据集来估计正态分布的均值和标准差。
代码分为以下四个步骤:
第一步:设置模型和数据集
我们使用normpdf函数构造正态分布模型,并通过randn函数生成具有个样本的数据集:
x = -5:0.1:5; % 样本空间
mu_true = -0.5; % 真实均值
s_true = 1.2; % 真实标准差
data = mu_true + s_true * randn(1,10000); % 样本大小为10000个
y = normpdf(x,mu_true,s_true); % 构造正态分布函数
subplot(1,2,1) % 绘制图形
plot(x,y)
xlabel('x')
ylabel('probability density')
subplot(1,2,2)
histogram(data,30,'Normalization','pdf') % 绘制样本数据直方图
xlabel('x')
ylabel('probability density')
第二步:定义似然函数
我们使用正态分布的似然函数:
function y = llh_normal(data, mu, sigma)
y = -0.5 * sum(log(2*pi*sigma^2) + ((data - mu).^2)./sigma^2);
end
第三步:似然函数的最大化
在Matlab中,您可以使用fminsearch函数最小化负对数似然函数以最大化似然函数。以下是拟合代码:
mu_0 = -1; % 初始估计均值
s_0 = 1; % 初始标准偏差
x0 = [mu_0, s_0]; % 初始估计
% 计算最大似然估计
options = optimset('MaxIter',500,'TolX',1e-6,'TolFun',1e-6); % 设置优化选项
[xhat, fval, exitflag] = fminsearch(@(x) -llh_normal(data, x(1), x(2)), x0, options);
mu_est = xhat(1); % 估计的均值
s_est = xhat(2); % 估计的标准偏差
disp(['mu_true = ', num2str(mu_true)])
disp(['s_true = ', num2str(s_true)])
disp(['mu_est = ', num2str(mu_est)])
disp(['s_est = ', num2str(s_est)])
第四步:结果可视化
我们使用拟合的结果来绘制拟合正态分布函数和数据集的直方图。
subplot(1,2,1)
y_true = normpdf(x,mu_true,s_true); % 真实正态分布函数
plot(x,y_true,'k--',x,y,'b',x,normpdf(x,mu_est,s_est),'r:','LineWidth',2)
legend('true','samples','estimate')
xlabel('x')
ylabel('probability density')
subplot(1,2,2)
histogram(data,30,'Normalization','pdf')
hold on
plot(x,normpdf(x,mu_est,s_est),'r-','LineWidth',2)
legend('samples','estimate')
xlabel('x')
ylabel('probability density')
以上就是用Matlab进行最大似然估计拟合的代码示例。
阅读全文