机器学习算法(七):朴素贝叶斯方法
2015-07-18 10:37
148 查看
朴素贝叶斯方法
简介
朴素贝叶斯方法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对于给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。朴素贝叶斯方法实际上学习到生成数据的机制,所以属于生成模型。条件独立假设是用于分类的特征在类确定的条件下都是条件独立的。这一假设使朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率,因为忽略掉了各项之间的联系。
朴素贝叶斯方法的学习与分类
朴素贝叶斯方法对条件概率作了条件独立性的假设。具体地,条件独立性假设是P(X=x|Y=ck)=P(X(1)=x(1),...,X(n)=x(n)|Y=ck)=∏j=1nP(X(j)=x(j)|Y=ck)P(X=x|Y=c_k)=P(X^{(1)}=x^{(1)},...,X^{(n)}=x^{(n)}|Y=c_k)=\prod _{j=1}^n P(X^{(j)}=x^{(j)}|Y=c_k)
朴素贝叶斯方法分类时,对给定的输入x,通过学习到的模型计算后验概率分布P(Y=ck|X=x)P(Y=c_k|X=x),将后验概率最大的类作为x的类输出。后验概率的计算根据贝叶斯定理进行:
P(Y=ck|X=x)=P(X=x|Y=ck)P(Y=ck)∑kP(X=x|Y=ck)P(Y=ck)P(Y=c_k|X=x)=\frac{P(X=x|Y=c_k)P(Y=c_k)}{\sum _k P(X=x|Y=c_k)P(Y=c_k)}
将条件独立假设代入后,朴素贝叶斯分类器可以表示为:
y=f(x)=argmax_ckP(Y=ck)∑jP(X(j)=x(j)|Y=ck)∑kP(Y=ck)∑jP(X(j)=x(j)|Y=ck)y=f(x)=argmax \_{c_k} \frac{P(Y=c_k) \sum_j P(X^{(j)}=x^{(j)}|Y=c_k)}{\sum _k P(Y=c_k) \sum_j P(X^{(j)}=x^{(j)}|Y=c_k)}
上式中的分母对所有的ckc_k都是相同的,故在计算的时候可以忽略。
朴素贝叶斯方法将实例分类到后验概率最大的类中,这等价于期望风险最小化。
朴素贝叶斯方法的参数估计
极大似然估计
在朴素贝叶斯方法中,学习意味着估计P(Y=ck)P(Y=c_k)和P(X(j)=x(j)|Y=ck)P(X^{(j)}=x^{(j)}|Y=c_k)。可以应用极大似然估计方法估计相应的概率。先验概率P(Y=ck)P(Y=c_k)的极大似然估计是P(Y=ck)=∑Ni=1I(yi=ck)N,k=1,2,...,KP(Y=c_k)=\frac{\sum _{i=1}^N I(y_i=c_k)}{N},k=1,2,...,K
设第j个特征x(j)x^{(j)}可能取值的集合为{aj1,aj1,...,ajSja _{j1},a _{j1},...,a _{jS _j}},条件概率P(X(j)=ajl|Y=ck)P(X^{(j)}=a _{jl}|Y=c_k)的极大似然估计是
P(X(j)=ajl|Y=ck)=∑Ni=1I(x(j)i=ajl,yi=ck)∑Ni=1I(yi=ck)P(X^{(j)}=a _{jl}|Y=c_k)=\frac{\sum _{i=1}^N I(x _i^{(j)}=a _{jl},y_i=c_k)}{\sum _{i=1}^N I(y_i=c_k)}
式中,x(j)ix _i^{(j)}是第i个样本的第j个特征;ajla _{jl}是第j个特征可能取的第l个值;I为指示函数。
贝叶斯估计
用极大似然估计对某一新实例进行分类时,可能因为实例中某个特征在训练数据中并未出现过,而导致分类结果有偏差。可以采用贝叶斯估计来解决。具体地,条件概率的贝叶斯估计是:Pλ(X(j)=ajl|Y=ck)=∑Ni=1I(x(j)i=ajl,yi=ck)+λ∑Ni=1I(yi=ck)+SjλP_{\lambda}(X^{(j)}=a _{jl}|Y=c_k)=\frac{\sum _{i=1}^N I(x _i^{(j)}=a _{jl},y_i=c_k)+ \lambda}{\sum _{i=1}^N I(y_i=c_k)+ S_j\lambda}
等价于在随机变量各个取值的频数上赋予一个正数λ\lambda。当λ=0\lambda=0时就是极大似然估计。常取λ=1\lambda=1,这时称为拉普拉斯平滑。同样,先验概率的贝叶斯估计是
Pλ(Y=ck)=∑Ni=1I(yi=ck)+λN+KλP _{\lambda}(Y=c_k)=\frac{\sum _{i=1}^N I(y_i=c_k)+ \lambda}{N+K \lambda}
相关文章推荐
- java 内部类详解
- “大圣归来”的神运营
- Java 类型, Hibernate 映射类型及 SQL 类型之间的对应关系
- 《textanalytics》课程简单总结(1):两种word relations——Paradigmatic vs. Syntagmatic
- 类的扩展
- 自定义ViewGroup(这里以自定义一个类似ViewPager的控件为例)
- [译]用R语言做挖掘数据《三》
- web.py安装时出现ImportError: No module named 'utils'
- 《RocketMQ 安装和使用》
- SSL/TLS协议运行机制的概述
- 设计一个算法,采用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G采用邻接表存储)
- LeetCode 118 Pascal's Triangle
- [LeetCode][Java] Minimum Window Substring
- 【实训项目】银行储蓄系统
- Secure Boot
- 地道
- SSL/TLS协议运行机制的概述
- linux运维人员需要知道的重要/常用目录介绍
- ajax提交form表单的两种方法
- 1048. Find Coins (25)