贝叶斯最小风险决策的matlab实例
时间: 2023-11-03 14:56:21 浏览: 164
下面是一个简单的贝叶斯最小风险决策的 Matlab 实例,该例演示了如何实现贝叶斯最小风险决策,并且可以使用它来帮助分类来自两个不同种类的数据。
假设有两种类型的数据,其中每种类型的数据都来自一个高斯分布。我们可以使用贝叶斯最小风险决策来确定给定一个新的数据点属于哪种类型的数据。
首先,我们需要生成一些示例数据:
```matlab
% 生成数据
mu1 = [1, 1]; % 类别 1 的均值
sigma1 = [1, 0; 0, 1]; % 类别 1 的协方差矩阵
X1 = mvnrnd(mu1, sigma1, 100); % 从类别 1 的高斯分布中生成 100 个数据点
mu2 = [-1, -1]; % 类别 2 的均值
sigma2 = [1, 0; 0, 1]; % 类别 2 的协方差矩阵
X2 = mvnrnd(mu2, sigma2, 100); % 从类别 2 的高斯分布中生成 100 个数据点
% 绘制数据
figure;
scatter(X1(:,1), X1(:,2), 'r');
hold on;
scatter(X2(:,1), X2(:,2), 'b');
legend('Class 1', 'Class 2');
```
然后,我们可以计算每个类别的先验概率,以及每个类别的条件概率密度函数:
```matlab
% 计算先验概率
p1 = 0.5; % 类别 1 的先验概率
p2 = 0.5; % 类别 2 的先验概率
% 计算条件概率密度函数
pdf1 = @(x) mvnpdf(x, mu1, sigma1); % 类别 1 的条件概率密度函数
pdf2 = @(x) mvnpdf(x, mu2, sigma2); % 类别 2 的条件概率密度函数
```
接下来,我们可以定义一个函数,该函数将一个新的数据点作为输入,并通过计算每个类别的期望损失来确定该数据点属于哪个类别:
```matlab
function [label, loss] = bayes_decision(x, p1, p2, pdf1, pdf2)
% 计算每个类别的期望损失
l11 = 0; % 类别 1 被误认为是类别 1 的损失
l12 = 1; % 类别 2 被误认为是类别 1 的损失
l21 = 1; % 类别 1 被误认为是类别 2 的损失
l22 = 0; % 类别 2 被误认为是类别 2 的损失
E1 = l11 * pdf1(x) * p1 + l21 * pdf2(x) * p2; % 类别 1 的期望损失
E2 = l12 * pdf1(x) * p1 + l22 * pdf2(x) * p2; % 类别 2 的期望损失
% 确定数据点属于哪个类别
if E1 < E2
label = 1;
loss = E1;
else
label = 2;
loss = E2;
end
end
```
最后,我们可以使用这个函数来分类一些新的数据点,并将其可视化:
```matlab
% 分类新数据
N = 100;
X = [linspace(-4, 4, N)', linspace(-4, 4, N)'];
labels = zeros(N, N);
losses = zeros(N, N);
for i = 1:N
for j = 1:N
[labels(i,j), losses(i,j)] = bayes_decision([X(i,j), X(i,j)], p1, p2, pdf1, pdf2);
end
end
% 绘制分类结果
figure;
contourf(X(:,1), X(:,2), labels, 1);
hold on;
scatter(X1(:,1), X1(:,2), 'r');
scatter(X2(:,1), X2(:,2), 'b');
legend('Decision boundary', 'Class 1', 'Class 2');
```
运行这个脚本,你将看到一个分类器将数据点分成两个类别的图形输出。
阅读全文