朴素贝叶斯方法(Naive Bayes Method)
朴素贝叶斯是一种很简单的分类方法,之所以称之为朴素,是因为它有着非常强的前提条件-其所有特征都是相互独立的,是一种典型的生成学习算法。所谓生成学习算法,是指由训练数据学习联合概率分布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)的更多相关文章
- PGM:贝叶斯网表示之朴素贝叶斯模型naive Bayes
http://blog.csdn.net/pipisorry/article/details/52469064 独立性质的利用 条件参数化和条件独立性假设被结合在一起,目的是对高维概率分布产生非常紧凑 ...
- 【机器学习速成宝典】模型篇05朴素贝叶斯【Naive Bayes】(Python版)
目录 先验概率与后验概率 条件概率公式.全概率公式.贝叶斯公式 什么是朴素贝叶斯(Naive Bayes) 拉普拉斯平滑(Laplace Smoothing) 应用:遇到连续变量怎么办?(多项式分布, ...
- 【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)
第4章 基于概率论的分类方法:朴素贝叶斯 朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础——贝叶斯定理.最后,我们 ...
- 【Spark机器学习速成宝典】模型篇04朴素贝叶斯【Naive Bayes】(Python版)
目录 朴素贝叶斯原理 朴素贝叶斯代码(Spark Python) 朴素贝叶斯原理 详见博文:http://www.cnblogs.com/itmorn/p/7905975.html 返回目录 朴素贝叶 ...
- 朴素贝叶斯(Naive Bayes)
1.朴素贝叶斯模型 朴素贝叶斯分类器是一种有监督算法,并且是一种生成模型,简单易于实现,且效果也不错,需要注意,朴素贝叶斯是一种线性模型,他是是基于贝叶斯定理的算法,贝叶斯定理的形式如下: \[P(Y ...
- 朴素贝叶斯(naive bayes)算法及实现
处女文献给我最喜欢的算法了 ⊙▽⊙ ---------------------------------------------------我是机智的分割线----------------------- ...
- 深入理解朴素贝叶斯(Naive Bayes)
https://blog.csdn.net/li8zi8fa/article/details/76176597 朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.朴素贝叶斯原理简 ...
- 模式识别之贝叶斯---朴素贝叶斯(naive bayes)算法及实现
处女文献给我最喜欢的算法了 ⊙▽⊙ ---------------------------------------------------我是机智的分割线----------------------- ...
- 【分类算法】朴素贝叶斯(Naive Bayes)
0 - 算法 给定如下数据集 $$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$ 假设$X$有$J$维特征,且各维特征是独立分布的,$Y$有$K$种取值.则 ...
- 朴素贝叶斯分类器Naive Bayes
优点Naive Bayes classifiers tend to perform especially well in one of the following situations: When t ...
随机推荐
- 最初程序员的思维“修炼”之四——Android平台开发的“强制关闭”解决思路
我和我的朋友参加一个比赛——物联网应用技能大赛,这个大赛所要求的技能有,硬件技术,Android平台开发技术,.NET平台开发技术,所以这是一个团队合作的比赛,基本上没有人能同时掌握这三种技术(在校生 ...
- 51nod1269 B君的圆锥
1629 B君的圆锥 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 B君要用一个表面积为S的圆锥将白山云包起来. B君希望包住的白山云体积尽量 ...
- 为什么要用ajax
Ajax应用程序的优势在于:1. 通过异步模式,提升了用户体验2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工 ...
- asp.net图片上传实例
网站后台都需要有上传图片的功能,下面的例子就是实现有关图片上传. 缺点:图片上传到本服务器上,不适合大量图片上传. 第一.图片上传,代码如下: xxx.aspx 复制代码代码如下: <td cl ...
- Python数据结构——栈、队列的实现(二)
1. 一个列表实现两个栈 class Twostacks(object): def __init__(self): self.stack=[] self.a_size=0 self.b_size=0 ...
- JDBC 基本操作: CRUD
Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的executeUpdate方法,用于向 ...
- Java集合的小抄
在尽可能短的篇幅里,将所有集合与并发集合的特征.实现方式.性能捋一遍.适合所有"精通Java",其实还不那么自信的人阅读. [转自:花钱的年华] 期望能不止用于面试时,平时选择数据 ...
- Uploadify 3.2 上传图片
uploadify version: uploadify 3.2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...
- OGG配置
准备安装和运行用户(操作系统用户) 建议使用oracle用户 也可以使用新建用户:但是需要做配置 必须缴入到oinstall 组 必须使用和oracle相同的profile 操作系统必须为该用户开放一 ...
- 还原没有日志文件的SQL数据库
1.执行命令示例: EXEC sys.sp_attach_db @dbname = 'AdventrueWorks2012_Data', @filename1 = N'C:\Program F ...