帮我用matlab实现一个贝叶斯分类器,要求我们有三个类别,每个类别有三个特征,用户可以将一个新的样本作为输入,输出为判断得出的样本类别
时间: 2024-02-25 16:55:31 浏览: 69
好的,以下是一个简单的贝叶斯分类器的matlab代码实现,使用鸢尾花数据集进行演示:
```matlab
% 加载鸢尾花数据集
load fisheriris
X = meas; % 特征矩阵
Y = species; % 标签
% 将数据集随机分为训练集和测试集
idx = randperm(size(X, 1));
X_train = X(idx(1:100), :);
Y_train = Y(idx(1:100));
X_test = X(idx(101:150), :);
Y_test = Y(idx(101:150));
% 计算每个类别的先验概率、均值和协方差矩阵
classes = unique(Y_train);
P_C = zeros(size(classes));
mu = zeros(length(classes), size(X_train, 2));
covs = cell(length(classes), 1);
for i = 1:length(classes)
class = classes(i);
P_C(i) = sum(ismember(Y_train, class)) / length(Y_train);
mu(i, :) = mean(X_train(Y_train == class, :));
covs{i} = cov(X_train(Y_train == class, :));
end
% 对测试集进行分类
Y_pred = zeros(length(Y_test), 1);
for i = 1:length(Y_test)
x = X_test(i, :);
P_x_C = zeros(length(classes), 1);
for j = 1:length(classes)
P_x_C(j) = mvnpdf(x, mu(j, :), covs{j});
end
P_C_x = P_x_C .* P_C;
[~, idx] = max(P_C_x);
Y_pred(i) = classes(idx);
end
% 计算分类准确率
acc = sum(Y_pred == Y_test) / length(Y_test);
fprintf('分类准确率为%.2f%%\n', acc * 100);
```
这个贝叶斯分类器使用高斯分布来建模每个类别的特征值,并使用贝叶斯公式计算后验概率。这个分类器可以用于多分类问题。这里使用鸢尾花数据集进行演示,可以替换成其他的数据集。
阅读全文