MATLAB绘制正态混合分布密度图的代码
时间: 2023-09-09 16:10:24 浏览: 139
以下是MATLAB绘制正态混合分布密度图的代码:
```matlab
%% 定义混合高斯分布参数
mu = [0 5]; % 均值
sigma = [1 2]; % 标准差
weight = [0.5 0.5]; % 每个分布的权重
%% 绘制混合高斯分布密度图
x = -10:0.1:15; % 自变量范围
y = weight(1)*normpdf(x,mu(1),sigma(1)) + weight(2)*normpdf(x,mu(2),sigma(2)); % 混合高斯分布函数
plot(x,y,'LineWidth',2); % 绘制混合高斯分布密度图
grid on;
title('混合高斯分布密度图');
legend('混合高斯分布');
```
你会发现,这段代码可以绘制出两个正态分布的混合分布密度图,其中一个分布的均值为0,标准差为1,权重为0.5;另一个分布的均值为5,标准差为2,权重也为0.5。
相关问题
MATLAB绘制二维概率密度和条件概率密度曲线和联合概率密度曲线
在MATLAB中,绘制二维概率密度函数(PDF)、条件概率密度函数(Conditional PDF)以及联合概率密度函数(Joint PDF)通常涉及使用`surf`、`contourf`、`quiver`等函数。以下是基本步骤:
1. **二维概率密度函数(PDF)**:
- 使用`surf(x,y,pdf)`命令,其中`x`和`y`是网格点的坐标,`pdf`是对应的概率值矩阵。
```matlab
[x, y] = meshgrid(-3:0.1:3, -3:0.1:3); % 创建网格
pdf = normpdf(x.^2 + y.^2, 0, 1); % 正态分布例子,中心(0,0),标准差1
surf(x, y, pdf)
```
2. **条件概率密度函数(Conditional PDF)**:
- 如果已知两个变量之间的关系,可以用直方图或图像显示条件概率。例如,给定X的条件下Y的概率,可以先计算出条件概率数组,然后用`imagesc`展示。
```matlab
% 假设X和Y服从某种联合分布,如高斯混合模型
[~, ~, pdf_x_given_y] = makedist('NormalMixture', 'NumComponents', 2);
[y, x_given_y] = ndgrid(y_values, pdf_x_given_y(condition));
imagesc(y, x_given_y)
```
3. **联合概率密度函数(Joint PDF)**:
- 可以同时画出两个随机变量的二维表面,使用相同的`surf`或`contourf`函数。
```matlab
[x, y] = meshgrid(x_values, y_values);
joint_pdf = joint_distribution(x, y);
surf(x, y, joint_pdf)
```
请使用一维数据 matlab的高斯混合模型异常值检测的代码
以下是使用一维数据的 Matlab 高斯混合模型异常值检测的代码示例:
% 生成一维数据
data = [randn(1, 500), 10+randn(1, 50)];
% 高斯混合模型参数估计
gmModel = fitgmdist(data', 2, 'RegularizationValue', 0.1);
% 计算每个数据点的概率密度值
pdfVals = pdf(gmModel, data');
% 根据概率密度值判断异常值
threshold = 0.01; % 定义阈值
outliers = data(pdfVals < threshold);
% 绘制数据和异常值
figure;
histogram(data, 'Normalization', 'pdf');
hold on;
plot(outliers, zeros(size(outliers)), 'rx', 'LineWidth', 2);
legend('数据分布', '异常值');
xlabel('数据值');
ylabel('概率密度');
title('高斯混合模型异常值检测');
在这个示例中,我们首先生成一个一维数据,其中前500个数据点是从标准正态分布中随机生成的,后50个数据点是从均值为10、方差为1的正态分布中随机生成的。然后,我们使用 fitgmdist 函数对数据进行高斯混合模型参数估计,得到一个包含两个高斯分布的模型。接着,我们计算每个数据点在模型下的概率密度值,并根据设定的阈值判断是否为异常值。最后,我们绘制数据分布和异常值的直方图,并用红色叉号标识出异常值。
阅读全文