---
title: matlab贝叶斯分类器
tags: 机器学习
category: matlab
---
## <!-- more -->参考来源
<http://www.tup.tsinghua.edu.cn/booksCenter/book_07680201.html>
## 仓库链接
计算过程 和 实验结果 可以查看我仓库中,链接如下:
<https://github.com/tiansztiansz/Bayesian-classifier-based-on-matlab>
## 最小错误率贝叶斯分类器
代码如下:
```matlab
clear;
clc;
% 总训练样本数
N = 29;
% 类别数目
w = 4;
% 每一个样本的特征数
n = 3;
% 训练样本中每一类的数目
N1 = 4; N2 = 7; N3 = 8; N4 = 10;
%% 训练数据(注意这里列为记录,行为特征)
% A 属于类别 w1。这里就表示 A 有 3 个特征,4条记录
A = [
864.45 877.88 1418.79 1449.58;
1647.31 2031.66 1775.89 1641.58;
2665.9 3071.18 2772.9 3045.12
];
% B 属于类别 w2。这里就表示 B 有3个特征,7条记录
B = [
2352.12 2297.28 2092.62 2205.36 2949.16 2802.88 2063.54;
2557.04 3340.14 3177.21 3243.74 3244.44 3017.11 3199.76;
1411.53 535.62 584.32 1202.69 662.42 1984.98 1257.21
];
% C 属于类别 w3。这里就表示C有3个特征,8条记录
C = [
1739.94 1756.77 1803.58 1571.17 1845.59 1692.62 1680.67 1651.52;
1675.15 1652 1583.12 1731.04 1918.81 1867.5 1575.78 1713.28;
2395.96 1514.98 2163.05 1735.33 2226.49 2108.97 1725.1 1570.38
];
% D 属于类别 w4。这里就表示D有3个特征,10条记录
D = [
373.3 222.85 401.3 363.34 104.8 499.85 172.78 341.59 291.02 237.63;
3087.05 3059.54 3259.94 3477.95 3389.83 3305.75 3084.49 3076.62 3095.68 3077.78;
2429.47 2002.33 2150.98 2462.86 2421.83 3196.22 2328.65 2438.63 2088.95 2251.96
];
% 计算每一类的平均值
X1 = mean(A')'
X2 = mean(B')'
X3 = mean(C')'
X4 = mean(D')'
% 每种类型的训练样本的协方差矩阵
S1 = cov(A')
S2 = cov(B')
S3 = cov(C')
S4 = cov(D')
% 每种类型的训练样本的逆矩阵
S1_ = inv(S1)
S2_ = inv(S2)
S3_ = inv(S3)
S4_ = inv(S4)
% 方差矩阵的行列式
S11 = det(S1)
S22 = det(S2)
S33 = det(S3)
S44 = det(S4)
% 先验概率
Pw1 = N1 / N
Pw2 = N2 / N
Pw3 = N3 / N
Pw4 = N4 / N
% 测试数据。注意这里的数据和上面的训练数据样式有一点差别,这里行是记录、列是特征
sample = [1702.8 1639.79 2068.74
1877.93 1860.96 1975.3
867.81 2334.68 2535.1
1831.49 1713.11 1604.68
460.69 3274.77 2172.99
2374.98 3346.98 975.31
2271.89 3482.97 946.7
1783.64 1597.99 2261.31
198.83 3250.45 2445.08
1494.63 2072.59 2550.51
1597.03 1921.52 2126.76
1598.93 1921.08 1623.33
1243.13 1814.07 3441.07
2336.31 2640.26 1599.63
354 3300.12 2373.61
2144.47 2501.62 591.51
426.31 3105.29 2057.8
1507.13 1556.89 1954.51
343.07 3271.72 2036.94
2201.94 3196.22 935.53
2232.43 3077.87 1298.87
1580.1 1752.07 2463.04
1962.4 1594.97 1835.95
1495.18 1957.44 3498.02
1125.17 1594.39 2937.73
24.22 3447.31 2145.01
1269.07 1910.72 2701.97
1802.07 1725.81 1966.35
1817.36 1927.4 2328.79
1860.45 1782.88 1875.13];
% 遍历测试样本的 30 条记录
for k = 1:30
% 计算后验概率
P1 = -1/2 * (sample(k, :)' - X1)' * S1_ * (sample(k, :)' - X1) + log(Pw1) - 1/2 * log(S11);
P2 = -1/2 * (sample(k, :)' - X2)' * S2_ * (sample(k, :)' - X2) + log(Pw2) - 1/2 * log(S22);
P3 = -1/2 * (sample(k, :)' - X3)' * S3_ * (sample(k, :)' - X3) + log(Pw3) - 1/2 * log(S33);
P4 = -1/2 * (sample(k, :)' - X4)' * S4_ * (sample(k, :)' - X4) + log(Pw4) - 1/2 * log(S44);
% 寻找4个类别中的最大后验概率
P = [P1 P2 P3 P4]
Pmax = max(P)
% 判别哪一类的后验概率为最大后验概率,并绘制分类图像和后验概率分布图像
if P1 == max(P)
w = 1
figure(1)
plot3(sample(k, 1), sample(k, 2), sample(k, 3), 'ro'); grid on; hold on;
title('基于最小错误率的分类结果示意图');
xlabel('第一特征坐标');
ylabel('第二特征坐标');
zlabel('第三特征坐标');
figure(2)
plot(P); grid on; hold on;
title('后验概率的分布曲线');
xlabel('类别');
ylabel('后验概率');
elseif P2 == max(P)
w = 2
figure(1)
plot3(sample(k, 1), sample(k, 2), sample(k, 3), 'b>'); grid on; hold on;
title('基于最小错误率的分类结果示意图');
xlabel('第一特征坐标');
ylabel('第二特征坐标');
zlabel('第三特征坐标');
figure(2)
plot(P); grid on; hold on;
title('后验概率的分布曲线');
xlabel('类别');
ylabel('后验概率');
elseif P3 == max(P)
w = 3
figure(1)
plot3(sample(k, 1), sample(k, 2), sample(k, 3), 'g+'); grid on; hold on;
title('基于最小错误率的分类结果示意图');
xlabel('第一特征坐标');
ylabel('第二特征坐标');
zlabel('第三特征坐标');
figure(2)
plot(P); grid on; hold on;
title('后验概率的分布曲线');
xlabel('类别');
ylabel('后验概率');
elseif P4 == max(P)
w = 4
figure(1)
plot3(sample(k, 1), sample(k, 2), sample(k, 3), 'y*'); grid on; hold on;
title('基于最小错误率的分类结果示意图');
xlabel('第一特征坐标');
ylabel('第二特征坐标');
zlabel('第三特征坐标');
figure(2)
plot(P); grid on; hold on;
title('后验概率的分布曲线');
xlabel('类别');
ylabel('后验概率');
else
return
end
end
```
## 最小风险贝叶斯决策
```matlab
clear;
clc;
% 总训练样本数
N = 29;
% 类别数目
w = 4;
% 每一个样本的特征数
n = 3;
% 训练样本中每一类的数目
N1 = 4; N2 = 7; N3 = 8; N4 = 10;
%% 训练数据(注意这里列为记录,行为特征)
% A 属于类别 w1。这里就表示 A 有 3 个特征,4条记录
A = [
864.45 877.88 1418.79 1449.58;
1647.31 2031.66 1775.89 1641.58;
2665.9 3071.18 2772.9 3045.12
];
% B 属于类别 w2。这里就表示 B 有3个特征,7条记录
B = [
2352.12 2297.28 2092.62 2205.36 2949.16 2802.88 2063.54;
2557.04 3340.14 3177.21 3243.74 3244.44 3017.11 3199.76;
1411.53 535.62 584.32 1202.69 662.42 1984.98 1257.21
];
% C 属于类别 w3。这里就表示C有3个特征,8条记录
C = [
1739.94 1756.77 1803.58 1571.17 1845.59 1692.62 1680.67 1651.52;
1675.15 1652 1583.12 1731.04 1918.81 1867.5 1575.78 1713.28;
2395.96 1514.98 2163.05 1735.33 2226.49 2108.97 1725.1 1570.38
];
% D 属于类别 w4。这里就表示D有3个特征,10条记录
D = [
373.3 222.85 401.3 363.34 104.8 499.85 172.78 341.59 291.02 237.63;
3087.05 3059.54 3259.94 3477.95 3389.83 3305.75 3084.49 3076.62 3095.68 3077.78;
2429.47 2002.33 2150.98 2462.86 2421.83 3196.22 2328.65 2438.63 2088.95 2251.96
];
% 计算每一类的平均值
X1 = mean(A')'
X2 = mean(B')'
X3 = mean(C')'
X4 = mean(D')'
% 每种类型的训练样本的协方差矩阵
S1 = cov(A')
S2 = cov(B')
S3 = cov(C')
S4 = cov(D')
% 每种类型的训练样本的逆矩阵
S1_ = inv(S1)
S2_ = inv(S2)
S3_ = inv(S3)
S4_ = inv(S4)
% 方差矩阵的行列式
S11 = det(S1)
S22 = det(S2)
S33 = det(S3)
S44 = det(S4)
% 先验概率
Pw1 = N1 / N
Pw2 = N2 / N
Pw3 = N3 / N
Pw4 = N4 / N
% 测试数据。注意这里的数据和上面的训练数据样式有一点差别,这里行是记录、列是特征
sample = [1702.8 1639.79 2068.74
1877.93 1860.96 1975.3
867.81 2334.68 2535.1
1831.49 1713.11 1604.68
460.69 3274.77 2172.99
2374.98 3346.98 975.31
2271.89 3482.97 946.7
1783.64 1597.99 2261.31
198.83 3250.45 2445.08
1494.63 2072.59 2550.51
1597.03 1921.52 2126.76
1598.93 1921.08 1623.33
1243.13 1814.07 3441.07
2336.31 2640.26 1599.63
354 3300.12 2373.61
2144.47 2501.62 591.51
426.31 3105.29

IT狂飙
- 粉丝: 4877
最新资源
- 本库是个基于python的工具集,用于记录数据到文件。 使用方便,代码简洁, 是一个可靠、省心且实用的工具。 支持多线程同时写入。.zip
- 本科毕业设计,基于python的图像复制粘贴篡改识别软件。.zip
- 本项目是基于计算机视觉的端到端交通路口智能监控系统.采用的设计架构由SRS
- 碧蓝航线ios平台自动脚本,基于python+opencv+facebook_wda实现.zip
- 毕业设计中基于给定微博数据的反作弊识别,用python开发。.zip
- 毕业设计项目,基于深度学习的实时语义分割算法研究,python实现。.zip
- 对基于python的微博爬虫进行重写,重写语言:java.zip
- 此框架是基于Python+Pytest+Requests+Allure+Yaml+Json实现全链路接口自动化测试
- 程序语言课程作业在线评测平台(实现Java、C、Python的选择、填空、代码题在线评测),基于SpringBoot+Layui+MySQL实现.zip
- 非官方的科大讯飞语音合成(用于朗读,配音场景)python API (基于官方demo增加了:超过2000字上限自动分割再合并音频的功能).zip
- 非官方的简易中国铁路列车运行图系统,基于Python + PyQt5
- 超市POS销售与后台管理系统_商品录入收银业务会员管理进货销售库存人员权限断网收银断电保护_实现超市前台POS销售商品扫描条形码输入收银计算找零打印清单会员折扣累计消费以及后台管理.zip
- 俄罗斯方块闯关版,基于Python实现.zip
- 该项目是基于Python和数据库实现的学生信息管理系统.zip
- 该仓库为agv系统调度软件的前后端实现。项目基于fastapi(python后端框架)和vue2实现了RESTful风格的前后端分离.zip
- 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


