matlab实现贝叶斯,最简单的贝叶斯分类器MATLAB实现
贝叶斯(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实现相关推荐
- 视觉机器学习20讲-MATLAB源码示例(6)-贝叶斯学习算法
视觉机器学习20讲-MATLAB源码示例(6)-贝叶斯学习算法 1. 贝叶斯学习算法 2. Matlab仿真 3. 小结 1. 贝叶斯学习算法 贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统 ...
- 朴素贝叶斯模型简单理解
小白一个,如果有问题欢迎大家指正. 朴素贝叶斯法 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.对于给定的训练数据集,首先基于特征条件独立假设学习输入\输出的联合概率分布:然后基于此模型, ...
- 变分推断 | MATLAB实现VBMC变分贝叶斯蒙特卡洛模拟的贝叶斯推断
变分推断 | MATLAB实现变分贝叶斯蒙特卡洛模拟的贝叶斯推断 目录 变分推断 | MATLAB实现变分贝叶斯蒙特卡洛模拟的贝叶斯推断 效果一览 基本介绍 研究内容 模型描述 模型设计 参考资料 效 ...
- 通俗简单讲解贝叶斯原理,并python实现贝叶斯分类代码
1. 前言 贝叶斯原理相信大家都非常熟悉了,但是一般情况下,我们的数学水平不怎么地,学生的数学基础也不怎么地,所以要想给学生简单明了的讲明白,还不是一件容易的事情. 为此,在备课(为河南中医药大学py ...
- 基于逻辑回归,支持向量机,朴素贝叶斯以及简单深度学习文本分类方法(BiLSTM、CNN)实现的中文情感分析,含数据集可直接运行
基于逻辑回归,支持向量机,朴素贝叶斯以及简单深度学习文本分类方法(BiLSTM.CNN)实现的中文情感分析,含数据集可直接运行 完整代码下载地址:中文情感分析 中文情感分析 本项目旨在通过一个中文情感 ...
- 朴素贝叶斯 半朴素贝叶斯_使用朴素贝叶斯和N-Gram的Twitter情绪分析
朴素贝叶斯 半朴素贝叶斯 In this article, we'll show you how to classify a tweet into either positive or negativ ...
- 三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯、伯努利朴素贝叶斯、多项式朴素贝叶斯
朴素贝叶斯 在机器学习中,朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器. 朴素贝叶斯算法Naive Bayes定义中有两个关键定义:特征之间强假设独立和贝 ...
- 机器学习之贝叶斯(贝叶斯定理、贝叶斯网络、朴素贝叶斯)
一.概率知识点复习 (1)条件概率 就是事件A在另外一个事件B已经发生条件下的发生概率.条件概率表示为P(A|B),读作"在B条件下A的概率". (2)联合概率 可以简单的理解为事 ...
- [work]从贝叶斯方法谈到贝叶斯网络
0 引言 事实上,介绍贝叶斯定理.贝叶斯方法.贝叶斯推断的资料.书籍不少,比如<数理统计学简史>,以及<统计决策论及贝叶斯分析 James O.Berger著>等等,然介绍贝叶 ...
- 贝叶斯网络在计算机,贝叶斯网络的特性 - 浙江大学计算机学院.ppt
贝叶斯网络的特性 - 浙江大学计算机学院 内容提纲 何谓贝叶斯网络? 贝叶斯网络的语义 条件分布的有效表达 贝叶斯网络中的精确推理 贝叶斯网络中的近似推理 课后习题.编程实现及研读论文 7.1 何谓贝 ...
最新文章
- [数位dp] spoj 10738 Ra-One Numbers
- Windows server 2003 DNS 全攻略(一)
- iOS autolayout
- windows获取文件夹下所有文件名的方法
- spring security之httpSecurity使用示例
- 基于双TMS320C6678+双XC6VSX315T的6U VPX高速数据处理平台
- 为什么前端开发这么不稳定?
- 【插件开发】—— 13 GEF双击模型事件
- 的微波感知_上海交大彭志科教授团队研发:微波微动监测与智能感知技术
- NYOJ-寻找最大数(贪心)
- Asp.Net 学习资源列表 [转]
- 故障转移群集 SQLSERVER解决方案
- ClickHouse表引擎Distributed介绍-尚硅谷大数据培训
- 计算机表格斜杠怎么打,excel表格斜杠怎么分隔打字(怎么在excel里一个表格内划斜线并添加文字)...
- fixdown down,一个时代的终结。
- 大学计算机计算题乘法,分数乘法计算题100道
- 【ARM学习笔记】问题Processor ARM920T raised an exception.Cause:Undefined instruction的解决方法
- CCCC 天梯赛初赛心得
- 教女朋友用Python快速绘制图表
- 如何查看内核版本和ubuntu版本
热门文章
- qt银行排队系统服务器代码,基于qt的银行排队系统
- HTML简单登录界面的实现
- Davids阅读笔记:《Redis设计与实现》
- dlna和miracast可以共存吗_关于无线显示技术,AirPlay,DLNA,Miracast,WiDi 等有何异同?...
- 独奏骑士服务器维护,独奏骑士新手天赋怎么选?新手天赋选择攻略
- c++编写手机小游戏代码_24个c++游戏源码
- 修改鼠标指针的样式,让鼠标变成动态个性化图标,让你的鼠标图标更炫酷起来。
- 新路由3 高恪魔改固件+底包
- 声卡调试精调效果都用那些宿主(DAW)机架和效果器插件
- AD09 覆铜步骤及设计规则