写一段matlab用最大似然估计法估计服从正态分布的训练集样本的分布参数,得到概率密度
时间: 2024-05-14 08:12:40 浏览: 117
fit_matlab_最大似然数法;估计参数;拟合_
5星 · 资源好评率100%
函数,并在测试集上进行验证。
假设我们有一个训练集样本 $X_1, X_2, ..., X_n$,服从正态分布 $N(\mu, \sigma^2)$,其中 $\mu$ 和 $\sigma^2$ 是未知的分布参数。我们可以使用最大似然估计法来估计这些参数。
首先,我们需要写出正态分布的概率密度函数:
$$f(x; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$
然后,我们需要写出似然函数:
$$\mathcal{L}(\mu, \sigma^2; x_1, x_2, ..., x_n) = \prod_{i=1}^{n} f(x_i; \mu, \sigma^2)$$
对似然函数取对数,得到对数似然函数:
$$\ln\mathcal{L}(\mu, \sigma^2; x_1, x_2, ..., x_n) = -\frac{n}{2}\ln(2\pi) -\frac{n}{2}\ln(\sigma^2) - \sum_{i=1}^{n} \frac{(x_i - \mu)^2}{2\sigma^2}$$
我们的目标是最大化对数似然函数,即找到最优的 $\mu$ 和 $\sigma^2$。我们可以使用 MATLAB 自带的优化函数 fminsearch 来实现最大化对数似然函数的过程。
假设我们有一个训练集样本 x_train,我们可以使用如下代码来估计分布参数:
```matlab
% 训练集样本
x_train = [1.2, 2.3, 3.1, 4.5, 5.6, 6.7, 7.8, 8.9, 9.0];
% 定义对数似然函数
f = @(theta) (-length(x_train)/2)*log(2*pi) - (length(x_train)/2)*log(theta(2)) - sum((x_train-theta(1)).^2)/(2*theta(2));
% 最大化对数似然函数
theta0 = [mean(x_train), var(x_train)]; % 初始值
[theta_hat, fval] = fminsearch(f, theta0);
% 得到估计的分布参数
mu_hat = theta_hat(1);
sigma2_hat = theta_hat(2);
% 得到概率密度函数
x_test = 0:0.1:10;
pdf_test = normpdf(x_test, mu_hat, sqrt(sigma2_hat));
% 绘制概率密度函数
figure;
plot(x_test, pdf_test);
xlabel('x');
ylabel('p(x)');
title('Estimated Probability Density Function');
% 在测试集上进行验证
x_test = [0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5];
pdf_test = normpdf(x_test, mu_hat, sqrt(sigma2_hat));
```
在上面的代码中,我们首先定义了对数似然函数 f,然后使用 fminsearch 函数来最大化对数似然函数,得到估计的分布参数 mu_hat 和 sigma2_hat。然后,我们使用 normpdf 函数来计算在测试集上的概率密度函数,并将其绘制出来。最后,我们使用 normpdf 函数计算测试集上每个样本的概率密度,并将其存储在 pdf_test 中。
阅读全文