朴素贝叶斯是一种很简单的分类方法,之所以称之为朴素,是因为它有着非常强的前提条件-其所有特征都是相互独立的,是一种典型的生成学习算法。所谓生成学习算法,是指由训练数据学习联合概率分布P(X,Y),然后求得后验概率P(X|Y)。具体来说,利用训练数据学习P(X|Y)和p(Y)的估计,得到联合概率分布:

    概率估计可以是极大似然估计,或者贝叶斯估计。

    假设输入 X 为n维的向量集合,输出 Y 为类别,X 和 Y 都是随机变量。P(X,Y)是X和Y的联合概率分布,训练数据集为:

       

    首先,我们要明确我们求解的目标是:,即给定某个输入X,我们要判断其所属类别Ck。由概率论知识,我们有:

                            其中,

    代入公式得:

    这是朴素贝叶斯分类的基本公式。于是,朴素贝叶斯分类器可以表示为

    由于,分母对所有的Ck都是相同的,所以

    那么如果给定一个输入 X,我们只需要找到一个类别Ck,使得最大。那么Ck,就是 X 的最佳类别了。

   

    下面我们来讲讲朴素贝叶斯法的参数估计,为什么要估计朴素贝叶斯的参数呢,这些参数是什么?首先,我们要明确。现实中,给定我们一批数据,我们就知道其分布,但是具体的数据分布的概率我们是不知道的。也就是说先验概率和条件概率我们是不知道的,这就需要我们来利用其数据的分布估计其先验概率和条件概率了。统计学习中最常用的参数估计就是极大似然估计了,这里我们也可以用贝叶斯估计,其实就是在极大似然估计基础上添加了拉普拉斯平滑(Laplace smoothing)。

    由于极大似然估计之前已经讲到过,这里公式我也没有具体来推,所以先验概率和条件概率直接给出来。

    先验概率P(Y = Ck)和条件概率的极大似然估计如下:

 

    这样,给定具体的数据,我们就可以估计其先验概率和条件概率,进而计算出后验概率得到所属类别。

    同样,贝叶斯估计和极大似然估计差不多,贝叶斯估计只是在极大似然估计上添加了一个拉普拉斯平滑。具体如下:

    条件概率的贝叶斯估计如下:

    先验概率的贝叶斯估计如下:

   

 

   下面来给出一个简单的朴素贝叶斯实现代码,代码比较容易理解。只是课本上给出的特征是离散的,而code里面的特征是连续的。原理上其实是一样一样的~

   1: % NAIVE BAYES CLASSIFIER

   2:  

   3: clear

   4: tic

   5: disp('--- start ---')

   6:  

   7: distr='normal';

   8: distr='kernel';

   9:  

  10: % read data

  11: White_Wine = dataset('xlsfile', 'White_Wine.xlsx');

  12: X = double(White_Wine(:,1:11));

  13: Y = double(White_Wine(:,12));

  14:  

  15: % Create a cvpartition object that defined the folds

  16: c = cvpartition(Y,'holdout',.2);

  17:  

  18: % Create a training set

  19: x = X(training(c,1),:);

  20: y = Y(training(c,1));

  21: % test set

  22: u=X(test(c,1),:);

  23: v=Y(test(c,1),:);

  24:  

  25: yu=unique(y);

  26: nc=length(yu); % number of classes

  27: ni=size(x,2); % independent variables

  28: ns=length(v); % test set

  29:  

  30: % compute class probability

  31: for i=1:nc

  32:     fy(i)=sum(double(y==yu(i)))/length(y);

  33: end

  34:  

  35: switch distr

  36:     

  37:     case 'normal'

  38:         

  39:         % normal distribution

  40:         % parameters from training set

  41:         for i=1:nc

  42:             xi=x((y==yu(i)),:);

  43:             mu(i,:)=mean(xi,1);

  44:             sigma(i,:)=std(xi,1);

  45:         end

  46:         % probability for test set

  47:         for j=1:ns

  48:             fu=normcdf(ones(nc,1)*u(j,:),mu,sigma);

  49:             P(j,:)=fy.*prod(fu,2)';

  50:         end

  51:  

  52:     case 'kernel'

  53:  

  54:         % kernel distribution

  55:         % probability of test set estimated from training set

  56:         for i=1:nc

  57:             for k=1:ni

  58:                 xi=x(y==yu(i),k);%the feature of dimension-k with respect to label yu(i)

  59:                 ui=u(:,k);

  60:                 fuStruct(i,k).f=ksdensity(xi,ui);

  61:             end

  62:         end

  63:         % re-structure

  64:         for i=1:ns

  65:             for j=1:nc

  66:                 for k=1:ni

  67:                     fu(j,k)=fuStruct(j,k).f(i);

  68:                 end

  69:             end

  70:             P(i,:)=fy.*prod(fu,2)';

  71:         end

  72:  

  73:     otherwise

  74:         

  75:         disp('invalid distribution stated')

  76:         return

  77:  

  78: end

  79:  

  80: % get predicted output for test set

  81: [pv0,id]=max(P,[],2);

  82: for i=1:length(id)

  83:     pv(i,1)=yu(id(i));

  84: end

  85:  

  86: % compare predicted output with actual output from test data

  87: confMat=myconfusionmat(v,pv);

  88: disp('confusion matrix:')

  89: disp(confMat)

  90: conf=sum(pv==v)/length(pv);

  91: disp(['accuracy = ',num2str(conf*100),'%'])

  92:  

  93: toc

   1: function confMat=myconfusionmat(v,pv)

   2:  

   3: yu=unique(v);

   4: confMat=zeros(length(yu));

   5: for i=1:length(yu)

   6:     for j=1:length(yu)

   7:         confMat(i,j)=sum(v==yu(i) & pv==yu(j));

   8:     end

   9: end

    如果想要实验数据的话,请在博客下面评论区域注明,我看到了会第一时间上传。

朴素贝叶斯方法(Naive Bayes Method)的更多相关文章

  1. PGM:贝叶斯网表示之朴素贝叶斯模型naive Bayes

    http://blog.csdn.net/pipisorry/article/details/52469064 独立性质的利用 条件参数化和条件独立性假设被结合在一起,目的是对高维概率分布产生非常紧凑 ...

  2. 【机器学习速成宝典】模型篇05朴素贝叶斯【Naive Bayes】(Python版)

    目录 先验概率与后验概率 条件概率公式.全概率公式.贝叶斯公式 什么是朴素贝叶斯(Naive Bayes) 拉普拉斯平滑(Laplace Smoothing) 应用:遇到连续变量怎么办?(多项式分布, ...

  3. 【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)

    第4章 基于概率论的分类方法:朴素贝叶斯 朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础——贝叶斯定理.最后,我们 ...

  4. 【Spark机器学习速成宝典】模型篇04朴素贝叶斯【Naive Bayes】(Python版)

    目录 朴素贝叶斯原理 朴素贝叶斯代码(Spark Python) 朴素贝叶斯原理 详见博文:http://www.cnblogs.com/itmorn/p/7905975.html 返回目录 朴素贝叶 ...

  5. 朴素贝叶斯(Naive Bayes)

    1.朴素贝叶斯模型 朴素贝叶斯分类器是一种有监督算法,并且是一种生成模型,简单易于实现,且效果也不错,需要注意,朴素贝叶斯是一种线性模型,他是是基于贝叶斯定理的算法,贝叶斯定理的形式如下: \[P(Y ...

  6. 朴素贝叶斯(naive bayes)算法及实现

    处女文献给我最喜欢的算法了 ⊙▽⊙ ---------------------------------------------------我是机智的分割线----------------------- ...

  7. 深入理解朴素贝叶斯(Naive Bayes)

    https://blog.csdn.net/li8zi8fa/article/details/76176597 朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.朴素贝叶斯原理简 ...

  8. 模式识别之贝叶斯---朴素贝叶斯(naive bayes)算法及实现

    处女文献给我最喜欢的算法了 ⊙▽⊙ ---------------------------------------------------我是机智的分割线----------------------- ...

  9. 【分类算法】朴素贝叶斯(Naive Bayes)

    0 - 算法 给定如下数据集 $$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$ 假设$X$有$J$维特征,且各维特征是独立分布的,$Y$有$K$种取值.则 ...

  10. 朴素贝叶斯分类器Naive Bayes

    优点Naive Bayes classifiers tend to perform especially well in one of the following situations: When t ...

随机推荐

  1. ERP基本功——物料的四个量

    ERP基本功——物料的四个量 在分析制造业管理问题的时候,如果能借用一些ERP里才会用到的概念,就会非常的简单,并且条理清晰. 我觉得柳中冈先生一再强调的一个观点非常有用,大意是这样的:任何人依据现有 ...

  2. FAN_int2ExcelColChar functions

    static void FAN_int2ExcelColChar(Args _args) { Dialog dlg = new dialog("please enter int number ...

  3. 如何计算IP地址及CIDR(收藏)

    如何计算IP地址及CIDR 一. IP地址概念 IP地址是一个32位的二进制数,它由网络ID和主机ID两部份组成,用来在网络中唯一的标识的一台计算机.网络ID用来标识计算机所处的网段:主 机ID用来标 ...

  4. C++11右值引用,移动主义

    理解1: 左值和右值针对等号而言, 等号左边称为左值, 等号右连称为右值. 理解2: 左值和右值针对表达式而言, 表达式结束后依然存在的持久对象称为左值, 表达式结束后不存在的持久对象称为右值. 理解 ...

  5. phpstrom 7.0 序列号

    phpstrom 7.0 用户名 www.goipc.cn license key 13748-1204201000001dZdtN0KxZbl8zNH8RHFCz9t"gjKv9yXf2c ...

  6. PHP正则表达式的逆向引用与子模式 php preg_replace应用

    mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) 功能 在 subject 中搜索 ...

  7. asp.net 多个域名重定向,在web.Config中配置

    一个网站有多个域名,但是需要在访问其中某个域名之后跳转到另一域名. Web.config 中配置 </system.webServer> <!--重定向 域名 开始--> &l ...

  8. 【CocoaPods】CocoaPods基本安装教程

    CocoaPods是什么,有什么用,怎么来等等我就不说了.反正就是一个管理第三方开源框架的~ 1. 配置前 - 本地安装好Ruby环境 2. 安装命令 -> sudo gem install c ...

  9. VB 思维导图总结(三)

    续上篇.vb总结之“思维导图”(2) 第十章.绘制图形 第十一章.数据库技术... 第十二章.总结! 相信有了vb的一个基础,应对接下来的学习会顺畅些.加油!

  10. VBS基础篇 - FileSystemObject对象

    文件系统是所有操作系统最重要的部分之一,脚本经常会需要对文件及文件夹进行访问和管理,在Vbs中对桌面和文件系统进行访问的顶级对象是FileSystemObject FSO包含的常见对象有:       ...