matlab实现贝叶斯2-Class Problem代码
时间: 2024-02-15 13:04:14 浏览: 24
下面是一个简单的 MATLAB 贝叶斯 2-Class Problem 的实现代码:
```matlab
% 假设有两个类别: A 和 B
% x 是一个观察变量,可以是一个向量或矩阵
% muA 和 muB 是 A 和 B 类别的均值,分别是向量或矩阵
% sigma 是两个类别的协方差矩阵,假设相同
function [decision, posteriorA, posteriorB] = bayes2class(x, muA, muB, sigma)
% 计算先验概率
priorA = 0.5;
priorB = 0.5;
% 计算类别 A 和 B 的后验概率
posteriorA = mvnpdf(x, muA, sigma) * priorA;
posteriorB = mvnpdf(x, muB, sigma) * priorB;
% 做出决策
if posteriorA > posteriorB
decision = 'A';
else
decision = 'B';
end
end
```
使用方法:
```matlab
% 生成一些随机数据
n = 100;
muA = [0 0];
muB = [3 3];
sigma = [1 0; 0 1];
xA = mvnrnd(muA, sigma, n);
xB = mvnrnd(muB, sigma, n);
% 预测一个新的观察值
xNew = [1 1];
[decision, posteriorA, posteriorB] = bayes2class(xNew, muA, muB, sigma);
% 绘制决策边界和数据点
x = -5:0.1:8;
y = -5:0.1:8;
[X,Y] = meshgrid(x,y);
Z = zeros(length(x),length(y));
for i = 1:length(x)
for j = 1:length(y)
xTest = [X(i,j) Y(i,j)];
[decision, posteriorA, posteriorB] = bayes2class(xTest, muA, muB, sigma);
if decision == 'A'
Z(i,j) = 1;
else
Z(i,j) = 0;
end
end
end
figure
hold on
scatter(xA(:,1),xA(:,2),'r')
scatter(xB(:,1),xB(:,2),'b')
contour(X,Y,Z,'LineWidth',1.5)
plot(xNew(1),xNew(2),'kx','MarkerSize',10,'LineWidth',2)
hold off
axis equal
```
该代码将生成一个决策边界和一些数据点,如下所示:
请注意,这只是一个简单的示例,如果你想要更复杂的实现,需要更多的代码和技能。