贝叶斯分类器(matlab)

article/2025/10/6 6:11:24

目标

下表由雇员数据库的训练数据组成。数据已泛化。例如,age“3135”表示年龄在31~35之间。对于给定的行,count表示department、status、age和salary在该行具有给定值的元组数。

DepartmentStatusAgeSalaryCount
SalesSenior31-3546K-50K30
Salesjunior26-3026K-30K40
Salesjunior31-3531K-35K40
sysytemsjunior21-2546K-50K20
sysytemsSenior31-3566K-70K5
sysytemsjunior26-3046K-50K3
sysytemsSenior41-4566K-70K3
marketingSenior36-4046K-50K10
marketingjunior31-3541K-45K4
secretarySenior45-6036K-40K4
secretaryjunior26-3026K-30K6

贝叶斯定理:

在这里插入图片描述

拉普拉斯校准法(拉普拉斯估计法):可以假定训练数据库D很大,以至于对每个计数加1造成的估计概率的变化可以忽略不计,但可以方便地避免概率值为为零。这种概率估计技术成为拉普拉斯校准或拉普拉斯估计法。如果对q个计数都加上1,则必须在用于计算概率地对应分母上加上q。

未使用拉普拉斯校准的朴素贝叶斯(matlab)

主程序:experiment_02.m
使用的自定义函数:Get_judge.m %调用的分类器
涉及到的数据文件:data.xlsx
三个文件夹放到同一级别目录下:
在这里插入图片描述
data.xlsx里面涉及的内容:
在这里插入图片描述

主函数experiment_02.m

clc;clear
%%朴素贝叶斯做分类
data=xlsread("data.xlsx","Sheet1","A2:G12");
career=data(:,1);%职业     1:sales    2:systems    3:marketing    4:secretary
label=data(:,2);%分类      0为junior  1为senior
%要预测的分类
sample=[2,26,30,46,50];
%%需要得到:职业2分类是1的概率;age在26-30分类是1的概率;收入在46-50之间分类是1的概率
[p1,p2]=get_judge(data,sample);
%%判断是哪个分类p1为senior
if p1>p2sample_label=1
elsesample_label=0
end

Get_judge.m %调用的分类器

function [p1,p2]= get_judge(data,sample)
%%需要判断有没有出现0值的情况,使用拉普拉斯校准
%junior和senior的概率
count=sum(data(:,7));
count_se=sum((data(:,2)==1).*data(:,7))
count_ju=sum((data(:,2)==0).*data(:,7))
p_se=count_se/count
p_ju=count_ju/count
%首先判断senior,junior里面是职业2的概率
% d_count=sum(data(find(data(:,1)==sample(1)),7));%职业是该样本的总人数
% d_count=sum( (data(:,1)==sample(1)).*data(:,7));
d_count_se=sum( (data(:,1) ==sample(1) & data(:,2)==1).*data(:,7));
d_count_ju=sum( (data(:,1) ==sample(1) & data(:,2)==0).*data(:,7));
p_de_1=d_count_se/count_se;
p_de_0=d_count_ju/count_ju;
%接着判断senior,junior是age:26-30之间是的概率
% age_count=sum( (data(:,3)==sample(2)).*data(:,7));
age_count_se=sum( (data(:,3)==sample(2) & data(:,2)==1).*data(:,7));
age_count_ju=sum( (data(:,3)==sample(2) & data(:,2)==0).*data(:,7));
p_age_1=age_count_se/count_se;
p_age_0=age_count_ju/count_ju;%判断senior,junior中是salary:46-50的概率
% sal_count=sum( (data(:,5)==sample(4)).*data(:,7));
sal_count_se=sum((data(:,5)==sample(4) & data(:,2)==1).*data(:,7));
sal_count_ju=sum((data(:,5)==sample(4) & data(:,2)==0).*data(:,7));
p_sal_1=sal_count_se/count_se;
p_sal_0=sal_count_ju/count_ju;
%%开始计算p1
%p_senior的概率p1=p_de_1*p_age_1*p_sal_1*p_se%%同理计算p2
p2=p_de_0*p_age_0*p_sal_0*p_ju

结果

在这里插入图片描述

分类结果为junior(sample_label=0)

添加了拉普拉斯校准后的分类器

程序入口:experiment_02.m(需要调用新的分类函数,下面给出改过的函数)
相关文件:get_judge2.mdata.xlsx(同上)

experiment_02.m

clc;clear
%%朴素贝叶斯做分类
data=xlsread("data.xlsx","Sheet1","A2:G12");
career=data(:,1);%职业     1:sales    2:systems    3:marketing    4:secretary
label=data(:,2);%分类      0为junior  1为senior
%要预测的分类
sample=[2,26,30,46,50];
%%需要得到:职业2分类是1的概率;age在26-30分类是1的概率;收入在46-50之间分类是1的概率
[p1,p2]=get_judge2(data,sample);
%%判断是哪个分类p1为senior
if p1>p2sample_label=1
elsesample_label=0
end

get_judge2.m

function [p1,p2]= get_judge2(data,sample)
%%需要判断有没有出现0值的情况,使用拉普拉斯校准
%junior和senior的概率
count=sum(data(:,7));
count_se=sum((data(:,2)==1).*data(:,7))
count_ju=sum((data(:,2)==0).*data(:,7))
p_se=count_se/count
p_ju=count_ju/count
%首先判断senior,junior里面是职业2的概率
% d_count=sum(data(find(data(:,1)==sample(1)),7));%职业是该样本的总人数
% d_count=sum( (data(:,1)==sample(1)).*data(:,7));
d_count_se=sum( (data(:,1) ==sample(1) & data(:,2)==1).*data(:,7));
if d_count_se==0d_count_se=1count_se=count_se+length(unique(data(:,1)));count=count+length(unique(data(:,1)));
end
d_count_ju=sum( (data(:,1) ==sample(1) & data(:,2)==0).*data(:,7));
if d_count_ju==0d_count_ju=1count_ju=count_ju+length(unique(data(:,1)));count=count+length(unique(data(:,1)));
end
p_de_1=d_count_se/count_se;
p_de_0=d_count_ju/count_ju;
%接着判断senior,junior是age:26-30之间是的概率
% age_count=sum( (data(:,3)==sample(2)).*data(:,7));
age_count_se=sum( (data(:,3)==sample(2) & data(:,2)==1).*data(:,7));
if age_count_se==0age_count_se=1count_se=count_se+length(unique(data(:,3)));count=count+length(unique(data(:,3)));
end
age_count_ju=sum( (data(:,3)==sample(2) & data(:,2)==0).*data(:,7));
if age_count_ju==0age_count_ju=1count_ju=count_ju+length(unique(data(:,3)));count=count+length(unique(data(:,3)));
end
p_age_1=age_count_se/count_se;
p_age_0=age_count_ju/count_ju;%判断senior,junior中是salary:46-50的概率
% sal_count=sum( (data(:,5)==sample(4)).*data(:,7));
sal_count_se=sum((data(:,5)==sample(4) & data(:,2)==1).*data(:,7));
if sal_count_se==0sal_count_se=1count_se=count_se+length(unique(data(:,5)))
end
sal_count_ju=sum((data(:,5)==sample(4) & data(:,2)==0).*data(:,7));
if sal_count_ju==0sal_count_ju=1count_ju=count_ju+length(unique(data(:,5)))
end
p_sal_1=sal_count_se/count_se;
p_sal_0=sal_count_ju/count_ju;
%%开始计算p1
%p_senior的概率p1=p_de_1*p_age_1*p_sal_1*p_se%%同理计算p2
p2=p_de_0*p_age_0*p_sal_0*p_ju

data.xlsx

在这里插入图片描述

结果

添加了拉普拉斯校准后的分类器:
在这里插入图片描述
上述哪里如果有问题的话,还请指教。


http://chatgpt.dhexx.cn/article/cfay1OVe.shtml

相关文章

Python实现朴素贝叶斯分类器

朴素贝叶斯分类器 文章目录 朴素贝叶斯分类器一、贝叶斯分类器是什么?贝叶斯判定准则朴素贝叶斯分类器举个栗子 二、相关代码1.数据处理2.生成朴素贝叶斯表(字典)关于如何判断属性的连续或离散性 根据朴素贝叶斯表计算预测标签 总结 一、贝叶…

贝叶斯分类器 (下)

目录 错误率与风险 朴素贝叶斯分类器 平滑:拉普拉斯修正 半朴素贝叶斯分类器 错误率与风险 书接上回,我们讲到最大后验概率,我们期望把概率最大时对应的属性,当做它最终的结果。我们自然也会思考,这样做准不准&…

贝叶斯分类器算法原理

目录 1.1,什么是朴素贝叶斯 1.2,极大似然估计 1.3,朴素贝叶斯分类器 1.4,朴素贝叶斯算法就程 1.5,朴素贝叶斯的优缺点 1.1,什么是朴素贝叶斯 在所有的机器学习分类算法中,朴素贝叶斯和其他…

【贝叶斯分类3】半朴素贝叶斯分类器

文章目录 1. 朴素贝叶斯分类器知识回顾1.1 类别,特征1.2 风险,概率1.3 类条件概率 2. 半朴素贝叶斯分类器学习笔记2.1 引言2.2 知识卡片2.3 半朴素贝叶斯分类器2.4 独依赖估计2.4.1 简介2.4.2 SPODE(超父独依赖估计)2.4.3 AODE(平均独依赖估计)2.4.4 TAN…

【贝叶斯分类2】朴素贝叶斯分类器

文章目录 1. 贝叶斯决策论回顾1.1 分类原理1.2 贝叶斯分类器1.3 P(c|x)1.4 计算公式1.5 极大似然估计 2. 朴素贝叶斯分类器学习笔记2.1 引言2.2 知识卡片2.3 朴素贝叶斯分类器2.4 拉普拉斯平滑 3. 朴素贝叶斯分类器拓展3.1 数据处理3.2 收集其他资料 1. 贝叶斯决策论回顾 1.1 …

朴素贝叶斯分类器

前知识了解: 贝叶斯决策论是概率框架下实施决策的基本方法。 贝叶斯定理: 贝叶斯定理是由果溯因的思想,当知道某件事情的结果后,由结果推断出这件事是由各种原因导致的概率为多少。极大似然估计: 朴素贝叶斯分类器…

贝叶斯分类器matlab实现

用matlab模拟最小错误率贝叶斯分类器与最小风险分类器,效果个人感觉还算能看的下去^_^ 注意:如果对实验原理还不算太懂,可以看其他大牛的博客或者看书,不管怎么样概率论知识是前提,不如乘法定理,条件概率&…

机器学习-贝叶斯分类器

https://www.toutiao.com/a6684876999611122187/ 2019-04-28 17:36:54 目录: 1.贝叶斯分类器的基础 2.朴素贝叶斯分类器 3.朴素贝叶斯分类实例 4.关于朴素贝叶斯容易忽略的点 5.朴素贝叶斯分类器的优缺点 1. 摘要 贝叶斯分类器是一类分类算法的总称&#xf…

贝叶斯分类器(Bayes Classifier)

一、贝叶斯定理 1、背景: 贝叶斯定理也称贝叶斯推理,早在18世纪,英国学者贝叶斯(1702~1763)曾提出 引用:百度百科 贝叶斯定理是关于随机事件A和B的条件概率(或边缘概率)的一则定理。其中P(A|B)…

实验五 贝叶斯分类器(模式识别与机器学习)

目录 实验一 离散型数据的朴素贝叶斯分类 实验步骤: NBtrain.m NBtest.m main.m 实验二 连续型数据的朴素贝叶斯分类 实验步骤: naiveBayestrain.m navieBayestest.m main.m 实验一 离散型数据的朴素贝叶斯分类 data数据集中含有625个样本,每个样…

贝叶斯分类器详解

文章目录 一、贝叶斯简介二、贝叶斯决策论三、极大似然估计例题解析 四、朴素贝叶斯分类器例题解析 五、半朴素贝叶斯分类器 一、贝叶斯简介 简介:贝叶斯分类器是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类器。而…

机器学习(六)——贝叶斯分类器

贝叶斯分类器是一类分类算法的总称,均以贝叶斯定理为理论基础 一、预备知识—贝叶斯决策论 1.公式 \qquad 贝叶斯决策论是概率框架下的实施决策的基本方法。对于分类任务来说,在所有相关概率都已知的理想情况下,贝叶斯决策论考虑如何基于概率…

机器学习——贝叶斯分类器

这里写目录标题 1.贝叶斯分类器属于生成式模型2.贝叶斯定理3.朴素贝叶斯分类器3.1朴素贝叶斯分类器中的数学模型3.2分类器的分类准则 1.贝叶斯分类器属于生成式模型 对于数据的判别分类有两种策略模型:判别式模型和生成式模型 判别式模型 : 逻辑回归、决策树、支持…

贝叶斯分类器原理——学习笔记

贝叶斯分类器原理 简介一、逆概率推理与贝叶斯公式1、确定性推理与概率推理2、贝叶斯公式 二、贝叶斯分类的原理三、概率估计1、先验概率的估计2、类条件概率的估计 四、贝叶斯分类的错误率五、常用贝叶斯分类器1、最小错误率贝叶斯分类器2、最小风险贝叶斯分类器3、朴素贝叶斯…

机器学习-贝叶斯分类器(附Python代码)

1. 贝叶斯原理 Naive Bayes 官方网址: https://scikit-learn.org/stable/modules/naive_bayes.html GitHub地址:https://github.com/gao7025/naive_bayes.git 贝叶斯分类是以贝叶斯定理为基础的一种分类算法,其主要思想为:先验…

chrome插件开发入门实战——CSDN免登陆拷贝、免关注查看

官方资料 docextensions官方chrome-extensions-samples 实战CSDN插件(V3) 功能 CSDN: 复制代码免登陆;CSDN: 免关注博主看文章;CSDN: 替换CSDN代码拷贝按钮,登陆也不用CSDN复制按…

Github实用浏览器插件推荐

文章目录 1. github树形目录插件-octotree(有付费功能)2. 快速下载github项目——GitHub加速3. 下载github中指定文件——GitZip for github4. github代码定义跳转浏览插件-Sourcegraph 某天看直播课程的时候看到这样一个界面: 然后就搜了一下…

IDEA必备插件

一、插件入口 二、IDEA必备插件 插件安装目录:C:\Users\用户名\AppData\Roaming\JetBrains\IntelliJIdea2021.3\plugins 1.Alibaba Java Coding Guidelines 推荐指数:★★★ 介绍:阿里巴巴Java编码指南 安装之后右键菜单会多出两个选项&a…

Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版

Visual Studio 2017,CMFC免注册调用大漠插件图文教程,详细版 前言 提示:这里可以添加本文要记录的大概内容: 有很多人都在问CMFC怎么免注册调用?其实这些都有参考但是对于新手来说,编译器对新手的不友好&#xff0c…

PHPstorm必备插件推荐

1、.env files support 对.env 文件的支持 2、 .ignore 对.ignore 文件的支持 3、 Ideolog 对 .log 文件的支持 4、 Chinese (Simplified) Language Pack / 中文语言包 官方版中文语言包 | 汉化语言包 5、 Git 对Git的支持 6、 GitToolBox 支持在文件中展示当前代码最后的…