贝叶斯(Baysian)分类器[1]是一种理论上比较简单的分类器。但是结合不同的网络结构和概率模形,它又可以演化成非常复杂的分类体系。本短文主要演示Baysian + Gaussian如何解两类问题。

其中,分母部分主要用于归一化。p(y)为先验概率(prior), p(x|y)为条件概率或称之为类概率密度(即已知x是哪一类的情况下p(x)的概率密度)。 在本文中,假设p(x|y)是高斯分布,即[2]:

而p(y)则采用伯努利(Bernoulli)分布[3]:

其中最大似然估计后得到的\eta即为第0类中训练样本的个数占总样本数的百分比。 求得五个参数后,就可能通过比较后验概率得到任意样本x的类别:

.

当f(x) 大于0时即表示

,

此时把样本x归为第0类,否则归为第1类。

下面通过Matlab程序进行演示:

训练的代码:

function [model_pos,model_neg ] = FindGuassianModel( x,y )

%FINDGUASSIANMODULE Summary of this function goes here

%   Detailed explanation goes here

x_pos = x(:,y==1);

model_pos.mu = mean(x_pos,2);

model_pos.var = cov(x_pos');

model_pos.prior = length(x_pos)/length(x);

x_neg = x(:,y~=1);

model_neg.mu = mean(x_neg,2);

model_neg.var = cov(x_neg');

model_neg.prior = length(x_neg)/length(x);

end

计算分类误差:

function [err,h] = FindModelError(model_pos,model_neg, x,y )

%FINDGUASSIANMODULE Summary of this function goes here

%   Detailed explanation goes here

mu1 = model_pos.mu;

sigma1 = model_pos.var;

p1 = model_pos.prior;

mu2 = model_neg.mu;

sigma2 = model_neg.var;

p2 = model_neg.prior;

bias = 0.5*log(det(sigma2))-0.5*log(det(sigma1))+log(p1/p2);

err = 0;

h = zeros(size(y));

for i=1:length(y)

c = bias + 0.5*(x(:,i)-mu2)'/sigma2*(x(:,i)-mu2) - 0.5*(x(:,i)-mu1)'/sigma1*(x(:,i)-mu1);

if c > 0

h(i) = 1;

else

h(i) = -1;

end

if h(i)~=y(i)

err = err + 1;

end

end

end

演示主程序:

%%

clc;

clear;

close all;

%% generate random data

shift =3.0;

n = 2;%2 dim

sigma = 1;

N = 500;

x = [randn(n,N/2)-shift, randn(n,N/2)*sigma+shift];

y = [ones(N/2,1);-ones(N/2,1)];

%show the data

figure;

plot(x(1,1:N/2),x(2,1:N/2),'rs');

hold on;

plot(x(1,1+N/2:N),x(2,1+N/2:N),'go');

title('2d training data');

legend('Positve samples','Negative samples','Location','SouthEast');

% model fitting using maximum likelihood

[model_pos,model_neg] = FindGuassianModel(x,y);

%% test on new dataset, same distribution

n = 2;%2 dim

%y = 1./exp(-w'*x+b)

sigma = 2;

N = 500;

x = [randn(n,N/2)-shift, randn(n,N/2)*sigma+shift];

y = [ones(N/2,1);-ones(N/2,1)];figure;plot(x(1,1:N/2),x(2,1:N/2),'rs');

hold on;

plot(x(1,1+N/2:N),x(2,1+N/2:N),'go');

title('2d testing data');

hold on;

%% gaussian model as a baseline

[err,h] = FindModelError(model_pos,model_neg,x,y);

fprintf('Baysian error on test data set: %f\n',err/N);

x_pos = x(:,h==1);

x_neg = x(:,h~=1);

plot(x_pos(1,:),x_pos(2,:),'r.');

hold on;

plot(x_neg(1,:),x_neg(2,:),'g.');

legend('Positve samples','Negative samples','Positve samples as predicted','Negative samples as predicted','Location','SouthEast');

最后的测试结果:

从测试结是上看,大部分样本都能分类正确(同色的点在同色的圆或方框中),只有0.8%的点分类错误。

matlab实现贝叶斯,最简单的贝叶斯分类器MATLAB实现相关推荐

  1. 视觉机器学习20讲-MATLAB源码示例(6)-贝叶斯学习算法

    视觉机器学习20讲-MATLAB源码示例(6)-贝叶斯学习算法 1. 贝叶斯学习算法 2. Matlab仿真 3. 小结 1. 贝叶斯学习算法 贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统 ...

  2. 朴素贝叶斯模型简单理解

    小白一个,如果有问题欢迎大家指正. 朴素贝叶斯法 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.对于给定的训练数据集,首先基于特征条件独立假设学习输入\输出的联合概率分布:然后基于此模型, ...

  3. 变分推断 | MATLAB实现VBMC变分贝叶斯蒙特卡洛模拟的贝叶斯推断

    变分推断 | MATLAB实现变分贝叶斯蒙特卡洛模拟的贝叶斯推断 目录 变分推断 | MATLAB实现变分贝叶斯蒙特卡洛模拟的贝叶斯推断 效果一览 基本介绍 研究内容 模型描述 模型设计 参考资料 效 ...

  4. 通俗简单讲解贝叶斯原理,并python实现贝叶斯分类代码

    1. 前言 贝叶斯原理相信大家都非常熟悉了,但是一般情况下,我们的数学水平不怎么地,学生的数学基础也不怎么地,所以要想给学生简单明了的讲明白,还不是一件容易的事情. 为此,在备课(为河南中医药大学py ...

  5. 基于逻辑回归,支持向量机,朴素贝叶斯以及简单深度学习文本分类方法(BiLSTM、CNN)实现的中文情感分析,含数据集可直接运行

    基于逻辑回归,支持向量机,朴素贝叶斯以及简单深度学习文本分类方法(BiLSTM.CNN)实现的中文情感分析,含数据集可直接运行 完整代码下载地址:中文情感分析 中文情感分析 本项目旨在通过一个中文情感 ...

  6. 朴素贝叶斯 半朴素贝叶斯_使用朴素贝叶斯和N-Gram的Twitter情绪分析

    朴素贝叶斯 半朴素贝叶斯 In this article, we'll show you how to classify a tweet into either positive or negativ ...

  7. 三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯、伯努利朴素贝叶斯、多项式朴素贝叶斯

    朴素贝叶斯 在机器学习中,朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器. 朴素贝叶斯算法Naive Bayes定义中有两个关键定义:特征之间强假设独立和贝 ...

  8. 机器学习之贝叶斯(贝叶斯定理、贝叶斯网络、朴素贝叶斯)

    一.概率知识点复习 (1)条件概率 就是事件A在另外一个事件B已经发生条件下的发生概率.条件概率表示为P(A|B),读作"在B条件下A的概率". (2)联合概率 可以简单的理解为事 ...

  9. [work]从贝叶斯方法谈到贝叶斯网络

    0 引言 事实上,介绍贝叶斯定理.贝叶斯方法.贝叶斯推断的资料.书籍不少,比如<数理统计学简史>,以及<统计决策论及贝叶斯分析 James O.Berger著>等等,然介绍贝叶 ...

  10. 贝叶斯网络在计算机,贝叶斯网络的特性 - 浙江大学计算机学院.ppt

    贝叶斯网络的特性 - 浙江大学计算机学院 内容提纲 何谓贝叶斯网络? 贝叶斯网络的语义 条件分布的有效表达 贝叶斯网络中的精确推理 贝叶斯网络中的近似推理 课后习题.编程实现及研读论文 7.1 何谓贝 ...

最新文章

  1. [数位dp] spoj 10738 Ra-One Numbers
  2. Windows server 2003 DNS 全攻略(一)
  3. iOS autolayout
  4. windows获取文件夹下所有文件名的方法
  5. spring security之httpSecurity使用示例
  6. 基于双TMS320C6678+双XC6VSX315T的6U VPX高速数据处理平台
  7. 为什么前端开发这么不稳定?
  8. 【插件开发】—— 13 GEF双击模型事件
  9. 的微波感知_上海交大彭志科教授团队研发:微波微动监测与智能感知技术
  10. NYOJ-寻找最大数(贪心)
  11. Asp.Net 学习资源列表 [转]
  12. 故障转移群集 SQLSERVER解决方案
  13. ClickHouse表引擎Distributed介绍-尚硅谷大数据培训
  14. 计算机表格斜杠怎么打,excel表格斜杠怎么分隔打字(怎么在excel里一个表格内划斜线并添加文字)...
  15. fixdown down,一个时代的终结。
  16. 大学计算机计算题乘法,分数乘法计算题100道
  17. 【ARM学习笔记】问题Processor ARM920T raised an exception.Cause:Undefined instruction的解决方法
  18. CCCC 天梯赛初赛心得
  19. 教女朋友用Python快速绘制图表
  20. 如何查看内核版本和ubuntu版本

热门文章

  1. qt银行排队系统服务器代码,基于qt的银行排队系统
  2. HTML简单登录界面的实现
  3. Davids阅读笔记:《Redis设计与实现》
  4. dlna和miracast可以共存吗_关于无线显示技术,AirPlay,DLNA,Miracast,WiDi 等有何异同?...
  5. 独奏骑士服务器维护,独奏骑士新手天赋怎么选?新手天赋选择攻略
  6. c++编写手机小游戏代码_24个c++游戏源码
  7. 修改鼠标指针的样式,让鼠标变成动态个性化图标,让你的鼠标图标更炫酷起来。
  8. 新路由3 高恪魔改固件+底包
  9. 声卡调试精调效果都用那些宿主(DAW)机架和效果器插件
  10. AD09 覆铜步骤及设计规则