贝叶斯分类器[通俗易懂]

贝叶斯分类器[通俗易懂]实验名称:贝叶斯分类器一、实验目的和要求目的:掌握利用贝叶斯公式进行设计分类器的方法。要求:分别做出协方差相同和不同两种情况下的判别分类边界。二、实验环境、内容和方法环境:windows7,m

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

实验名称:贝叶斯分类器

 

一、实验目的和要求

目的

掌握利用贝叶斯公式进行设计分类器的方法。

 

要求

分别做出协方差相同和不同两种情况下的判别分类边界。

 

二、实验环境、内容和方法

环境:windows 7,matlab R2010a

内容:根据贝叶斯公式,给出在类条件概率密度为正态分布时具体的判别函数表达式,用此判别函数设计分类器。数据随机生成,比如生成两类样本,每个样本有两个特征,每类有若干个(比如20个)样本点,假设每类样本点服从二维正态分布,随机生成具体数据,然后估计每类的均值与协方差,在两类协方差相同的情况下求出分类边界。先验概率自己给定,比如都为0.5。如果可能,画出在两类协方差不相同的情况下的分类边界。画出图形。

 

三、实验基本原理

条件概率:

贝叶斯分类器[通俗易懂]表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为:贝叶斯分类器[通俗易懂]

贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B)P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。

下面不加证明地直接给出贝叶斯定理:

贝叶斯分类器[通俗易懂]

朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。朴素贝叶斯分类的正式定义如下:

1、设贝叶斯分类器[通俗易懂]为一个待分类项,而每个ax的一个特征属性。

2、有类别集合贝叶斯分类器[通俗易懂]

3、计算贝叶斯分类器[通俗易懂]

4、如果贝叶斯分类器[通俗易懂],则贝叶斯分类器[通俗易懂]

那么现在的关键就是如何计算第3步中的各个条件概率。我们可以这么做:

1、找到一个已知分类的待分类项集合,这个集合叫做训练样本集。

2、统计得到在各类别下各个特征属性的条件概率估计。即贝叶斯分类器[通俗易懂]

3、如果各个特征属性是条件独立的,则根据贝叶斯定理有如下推导:

贝叶斯分类器[通俗易懂]

因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:

贝叶斯分类器[通俗易懂]

根据上述分析,朴素贝叶斯分类的流程可以由下图表示(暂时不考虑验证):

贝叶斯分类器[通俗易懂]

对于具有多个特征参数的样本,其正态分布的概率密度函数可定义为

贝叶斯分类器[通俗易懂]

式中,贝叶斯分类器[通俗易懂]贝叶斯分类器[通俗易懂]维行向量,贝叶斯分类器[通俗易懂]贝叶斯分类器[通俗易懂]维行向量,贝叶斯分类器[通俗易懂]贝叶斯分类器[通俗易懂]维协方差矩阵,贝叶斯分类器[通俗易懂]贝叶斯分类器[通俗易懂]的逆矩阵,贝叶斯分类器[通俗易懂]贝叶斯分类器[通俗易懂]的行列式。

由其判决规则,如果使贝叶斯分类器[通俗易懂]对一切贝叶斯分类器[通俗易懂]成立,则将贝叶斯分类器[通俗易懂]归为贝叶斯分类器[通俗易懂]类。

我们根据假设:类别贝叶斯分类器[通俗易懂],i=1,2,……,N的类条件概率密度函数贝叶斯分类器[通俗易懂],i=1,2,……,N服从正态分布,即有贝叶斯分类器[通俗易懂]~贝叶斯分类器[通俗易懂],那么上式就可以写为

贝叶斯分类器[通俗易懂]

对上式右端取对数,可得

贝叶斯分类器[通俗易懂]

上式中的第二项与样本所属类别无关,将其从判别函数中消去,不会改变分类结果。则判别函数贝叶斯分类器[通俗易懂]可简化为以下形式

贝叶斯分类器[通俗易懂]

 

四、实验过程描述

 

1.产生第一类数据:

x1是第一类数据,x2 是第二类数据,每一列代表一个样本(两个特征)

x1(1,:) = normrnd(14,4,1,20); x1(2,:) = normrnd(20,4,1,20);

x2(1,:) = normrnd(16,4,1,20); x2(2,:) = normrnd(10,4,1,20);

2.均值的估计为贝叶斯分类器[通俗易懂]

协方差的估计为贝叶斯分类器[通俗易懂]

两类协方差相同的情况下的分类边界为:

贝叶斯分类器[通俗易懂]贝叶斯分类器[通俗易懂]

贝叶斯分类器[通俗易懂]

两类协方差不相同的情况下的判别函数为:

贝叶斯分类器[通俗易懂]

 

五、实验结果

 

协方差相同的情况下,判别分类边界其实就是线性分类器产生的边界。在协方差不同的情况下的二次线性分类边界有时会出现奇怪的形状。

贝叶斯分类器[通俗易懂]

 

六、附录代码

%main.m

 

clear;clc;

randseed;

x1(1,:) = normrnd(12,4,1,20);%生成高斯分布的随机序列

x1(2,:) = normrnd(20,4,1,20);%均值,标准差,m×n随机向量

 

plot(x1(1,:),x1(2,:),’ro’,…

‘LineWidth’,1,…

‘MarkerEdgeColor’,’k’,…

‘MarkerFaceColor’,[1 0 0],…

‘MarkerSize’,7)

x2(1,:) = normrnd(18,4,1,20);

x2(2,:) = normrnd(10,4,1,20);

pw1=0.5;

pw2=0.5;

hold on; %新画图像之后不覆盖原图

plot(x2(1,:),x2(2,:),’bo’,…

‘LineWidth’,1,…

‘MarkerEdgeColor’,’k’,…

‘MarkerFaceColor’,[0 0 0.5],…

‘MarkerSize’,7)

u1 = sum(x1,2)/20;

u2 = sum(x2,2)/20;

x1count = size(x1,2);

x1t = x1-kron(u1,ones(1,x1count));

S1t = x1t * x1t’ / x1count;

 

x2count = size(x2,2);

x2t = x2-kron(u2,ones(1,x2count));

S2t = x2t * x2t’ / x2count;

 

St = (S1t+S2t)/2;

w = St^(-1) * (u1-u2);

% Y= inv(X) returns the inverse of the square matrix X矩阵求逆

x0 = (u1+u2)/2 – log(pw1/pw2)/((u1-u2)’*inv(St)*(u1-u2)) *(u1-u2);

k=-w(1)/w(2);

b = x0(2)-k*x0(1);

x=[5,23];

plot(x,k*x+b,’g-.’,’LineWidth’,3);

S1tinv = inv(S1t);

S2tinv = inv(S2t);

W1=-1/2 * S1tinv;

W2=-1/2 * S2tinv;

w1=S1tinv*u1;

w2=S2tinv*u2;

%d = det(X) returns the determinant of the square matrix X.矩阵行列式

w10=-1/2 * u1’*S1tinv*u1 – 1/2 *log(det(S1t)) + log(pw1);

w20=-1/2 * u2’*S2tinv*u2 – 1/2 *log(det(S2t)) + log(pw2);

t2=[]

for t1=1:23

%Solve system of nonlinear equations求解非线性方程组

tt2 = fsolve(‘bayesian_fun’,5,[],t1,W1,W2,w1,w2,w10,w20);

t2=[t2,tt2];

end

plot(1:23,t2,’b’,’LineWidth’,3);

 

 

% f=bayesian_fun.m

function f=bayesian_fun(t2,t1,W1,W2,w1,w2,w10,w20)

x=[t1,t2]’;

f=x’*W1*x+w1’*x+w10 – (x’*W2*x+w2’*x+w20);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166899.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用u盘之前需要将其格式化_使用g中的光盘之前需要将其格式化

    使用u盘之前需要将其格式化_使用g中的光盘之前需要将其格式化本人使用一个外置硬盘,结果每次下载东西都需要重新格式化,从网上找了下方法,发现Windows有自动修复的工具,不用每次格式化。1.首先进入运行,保证自己管理员模式,通过"Windows键+

    2022年8月6日
    3
  • SpringBoot——关于Cache缓存获取值后修改的问题「建议收藏」

    SpringBoot——关于Cache缓存获取值后修改的问题「建议收藏」SpringBoot——关于Cache缓存获取值后修改的问题

    2022年4月23日
    34
  • 简单人脸识别一之使用opencv+cnn网络实现人脸识别

    简单人脸识别一之使用opencv+cnn网络实现人脸识别最近在研究目标检测这个方向,看到网上有很多的人脸识别帖子,所以也想着上上手看看。当时是做了三个模型出来,第一个就是网上很通用普遍的opencv+简单三层cnn网络来实现的,说实话效果真的一般吧!具体的下面再细细陈述。第二个是把三层cnn网络换成了残差网络。因为自己刚好也是学习了残差网络。就想着生搬硬套过来,但效果说实话很迷,时好时坏,把我是整蒙逼了,后面也会提的。最后一个是用opencv+MTCN…

    2022年5月11日
    43
  • 舵机控制原理详解「建议收藏」

    舵机控制原理详解「建议收藏」控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部

    2022年6月15日
    35
  • 指针基础知识笔记

    指针基础知识笔记指针式C语言中的重要概念,也是C语言的一个重要特色,C的精华所在吧。1.指针-内存地址;2.指针变量:定义为,存放指向存储什么数据类型的地址的变量;它的值就是地址; 定义指针变量: 类型名*指针变量名;//类型名就是指向地址上的数据的类型; 例如: char*pa; int*pb;(注意的是):避免访问未初始化的指针; 3.取地址运算符:&获取某个变量的地址;//初始化指针; 例如:(chara;intb); char

    2022年5月1日
    32
  • Python中通过PyPDF2实现PDF拆分「建议收藏」

    Python中通过PyPDF2实现PDF拆分「建议收藏」场景PyPDF2是一个纯pythonPDF库,能够分割、合并、裁剪和转换PDF文件的页面。它还可以向PDF文件中添加自定义数据、查看选项和密码。它可以从PDF检索文本和元数据,还可以将整个文件合并在一起。PyPDF21.26.0文档:https://pythonhosted.org/PyPDF2/实现使用pip安装pypddf2新建merged.pdf有两页…

    2022年6月23日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号